doPost супер вызывает - HTTP-статус 405

До сих пор я считал обычной практикой вызывать super.doPost(req, resp) из doPost(req, resp){} вашего сервлета. Но вот проблема, с которой я столкнулся: у меня есть очень простой сервлет с doPost (req, resp), и, поскольку это был автоматически сгенерированный метод из eclipse, он имел super.doPost(req, resp) это нормально, так как он вызывает doPost() своего родителя, но я получал

Статус HTTP 405 — HTTP-метод GET не поддерживается этим URL-адресом при каждом обращении к сервлету. Я просмотрел много сообщений и этот пост

говорили об одной и той же проблеме, и одним из предложенных решений было удаление super.doGet().

Я сделал то же самое с моим методом Post, и, к моему удивлению, это сработало!!!!

Я не могу найти этому логическую причину. Может кто-нибудь объяснить, что происходит? Почему

405 мигает из-за вызова super.doPost().

Спасибо, Саурабх.


person Saurabh    schedule 23.11.2013    source источник


Ответы (1)


Реализация HttpServlet.doPost по умолчанию возвращает ошибку 405 (метод не разрешен). Вы должны реализовать метод doPost, если хотите поддерживать метод POST в своем сервлете.

Это код HttpServlet.doPost:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    String protocol = req.getProtocol();
    String msg = lStrings.getString("http.method_post_not_supported");
    if (protocol.endsWith("1.1")) {
        resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
    } else {
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
    }
}
person LaurentG    schedule 23.11.2013
comment
Таким образом, мы расширяем HttpServlet и @Override doPost, но в нашей реализации мы не вызываем его super, поскольку вызов super даст это сообщение. Хммм.... Прочитав ваш ответ, я также перешел по ссылке . Понятно!!! - person Saurabh; 23.11.2013