Справочная информация:
Я пишу приложение сервлета и хотел бы, чтобы сервлет обрабатывал запросы GET и POST. Сервлет встроен в файл WAR и размещен локально с использованием сервера Tomcat на моей машине разработки (localhost: 8080) для тестирования.
GET-запросы к сервлету работают нормально (возвращает страницу index.jsp), тогда как POSTing к тому же URL-адресу не запускает код в методе doPost () (также возвращает страницу index.jsp).
Это мой код класса сервлета:
public class SelfserviceServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/index.jsp");
view.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String ip_address = request.getParameter("someparam");
String port = request.getParameter("someotherparam");
// Do some operation here to produce html_output
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(html_output.toString());
}
}
Это мой файл web.xml:
<servlet>
<servlet-name>SelfservicePortal</servlet-name>
<servlet-class>com.somename.module.SelfserviceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SelfservicePortal</servlet-name>
<url-pattern>/portal</url-pattern>
</servlet-mapping>
РЕДАКТИРОВАТЬ: Это файл index.jsp:
<html>
<head>
<script>
function sendPOST(){
// First URL try
$.ajax({
url: "/SelfservicePortal",
type: "POST",
contentType: "application/x-www-form-urlencoded",
data: "someparam=" + encodeURIComponent(someparam) + "&someotherparam=" + encodeURIComponent(someotherparam),
success: function(data) {
alert(data);
},
error: function() {
alert("Error");
}
});
// Second URL try
$.ajax({
url: "/SelfservicePortal/portal/",
type: "POST",
contentType: "application/x-www-form-urlencoded",
data: "someparam=" + encodeURIComponent(someparam) + "&someotherparam=" + encodeURIComponent(someotherparam),
success: function(data) {
alert(data);
},
error: function() {
alert("Error");
}
});
}
</script>
<body>
<button type="button" onclick="sendPOST();">Send POST</button>
</body>
</html>
Вот мои результаты:
GET localhost:8080/SelfservicePortal
-> index.jsp
GET localhost:8080/SelfservicePortal/portal
-> 404 Не найдено
POST localhost:8080/SelfservicePortal
-> index.jsp [ЭТО ДОЛЖНО БЫТЬ html_output]
POST localhost:8080/SelfservicePortal/portal
-> 404 Не найдено
Как мне заставить POST-запросы работать правильно и почему запросы к шаблону отображения URL возвращают 404?