Что называется первым doGet или doPost? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть вопрос о приоритетах doGet doPost (если они есть).Вот мой класс HelloServlet:

public class HelloServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doPost(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.getWriter().println("Hello, World Post!");
}


@Override
public void init() throws ServletException {
    System.out.println("Servlet " + this.getServletName() + " has started.");
}

@Override
public void destroy() {
    System.out.println("Servlet " + this.getServletName() + " has stopped.");
}

Этот класс сопоставлен с URL-адресом /reeting.Когда я пытаюсь получить доступ к этой странице сейчас, все в порядке.Но когда я меняю методы doPost и doGet, я выдаю сообщение об ошибке: HTTP Status 405 - HTTP-метод GET не поддерживается этим URL.Каждый раз, когда я читаю о doGet и doPost, я предполагаю, что эти методы взаимозаменяемы.Так в чем же проблема с этой версией этих методов?

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.getWriter().println("Hello, World Post!");
}

Это, конечно, не вызвало никаких исключений, потому что присутствует doGet, но он не будет выполнять никакой работы.Когда я удаляю метод doGet, он выдает исключение.

Подскажите, пожалуйста, что именно происходит в тот момент, когда я использую мой код URL?http://localhost:8080/greeting

Почему клиент просто не может использовать метод doPost для получения данных с сервера, когда doGet полностью отсутствует?

Спасибо!

UPDATE WEB.xmlфайл

<display-name>Hello World Application</display-name>

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.wrox.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/greeting</url-pattern>
</servlet-mapping>

1 Ответ

0 голосов
/ 06 декабря 2018

Если вы не укажете метод запроса по умолчанию, это будет GET, что означает вызов doGet ().пример: http://www.anywebsite.com - это запрос GET по умолчанию.

Но вы должны указать, что ваш запрос является запросом POST для выполнения doPost (). Пример:

<form action="/servlet" method="POST"> <input type="text" name="something" </form>

...