2012-02-05 4 views
7

Я хочу знать, что в сервлетах мы используем методы doGet и doPost вместе в одной программе. Каково его использование?servlet doGet и doPost методы

Что означает следующий код?
Зачем вызывать метод doGet из doPost? Я не совсем понимаю этот код.

public class Info extends HttpServlet 
{ 

public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws IOException, ServletException 
{ 

} 


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

Благодаря

ответ

2

Просто, чтобы сделать сервлет обобщенным так, что даже если мы изменим метод запроса в будущем, нет необходимости редактировать сервлет, что уменьшит усилия по изменению приложения в будущем.

20

doGet() обрабатывает входящий HTTP GET запросов в то время как doPost() обрабатывает ... POST запросов. Существуют также эквивалентные методы для обработки PUT, DELTE и т. Д.

Если вы отправите свою форму с помощью GET (по умолчанию), вызывается doGet(). Если вы отправите с помощью POST, на этот раз будет вызван doPost(). Если вы только реализуете doPost(), но форма будет использовать GET, контейнер сервлетов будет генерировать исключение.

Во многих программах серверу не важно, использует ли запрос GET или POST, поэтому один метод просто делегирует другому. На самом деле это плохая практика, поскольку эти методы по своей сути отличаются друг от друга, но многие учебники пишут это так (к лучшему или к худшему).

+0

Когда вы действительно хотите отличить get и post от сервлета? Каким будет прецедент (или требование)? –

+4

Предполагается, что GET получит ресурс. Он должен быть идемпотентным и не должен ничего изменять на сервере. POST не является идемпотентным и используется для создания, обновления или удаления чего-либо на сервере. Нет причин использовать POST, когда необходимо использовать GET и использовать GET, когда POST следует использовать, является плохой практикой и может вызвать всевозможные проблемы, если пользователь обновляет страницу или перемещается по истории. Обычно используется GET для отображения формы и POST для ее отправки. –

+0

'doGet()' for '/ users' возвращает список,' doPost() 'для одного и того же URL (сервлета) создает нового пользователя. Конечно, я могу делегировать оба метода в один, а затем использовать ['HttpServletRequest.getMethod()'] (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html# getMethod()), но это только усложняет ситуацию. –

1

Не связано ли это с запросом получения, чтобы параметры отображались в URL-адресе в окне браузера, а почтовый запрос включал параметры в структуру запроса и, следовательно, скрывал от представления. Как ваш запрос будет сделан от клиента в качестве получателя или сообщения. Я думаю, что это что-то связано с безопасностью и избегает инъекций sql, но это не моя область. Надеюсь, какой-то эксперт с правильным моим взглядом/комментарием, поскольку мне нужно это знать самому.

3

Это должно обрабатывать оба типа запросов, например. GET и POST из http. в зависимости от требований приложения люди могут выбрать тип запроса как GET или POST, так что если вы работаете с обоими из них, вы получите ошибку. и в случае, если вы хотите, чтобы справиться с ними обоими подобным образом, то вы можете создать еще один метод DoSomething и вызывать его из ваших методов doGet и doPost для получения дополнительной информации see this answer

0

Как вы отметили here вы действительно можете назвать третий метод, но вы также может переопределить метод service() из материнского класса HttpServlet, чтобы он вызывал один метод alawys.

Смежные вопросы