POST-запрос к сервлету возвращает результат метода GET - PullRequest
1 голос
/ 19 апреля 2019

Справочная информация:

Я пишу приложение сервлета и хотел бы, чтобы сервлет обрабатывал запросы 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?

1 Ответ

1 голос
/ 19 апреля 2019

Я думаю, что вы забыли добавить аннотации в свой сервлет, попробуйте использовать приведенный ниже код и посмотрите, работает он или нет. также добавьте @MultipartConfig, если вы хотите использовать данные формы вместо URL-кодированных данных.

    @WebServlet("/portal")    
    @MultipartConfig
    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());
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...