Обязательно ли иметь метод doGet или doPost? - PullRequest
2 голосов
/ 10 ноября 2010

У меня есть несколько вопросов.

  1. Могу ли я иметь сервлет без этих двух методов?
  2. Могу ли я вызвать свою форму непосредственно для метода обслуживания ... Как

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class FormServlet extends HttpServlet {

protected void doService (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

Ответы [ 5 ]

4 голосов
/ 10 ноября 2010

Нет, это не обязательно. Поскольку HttpServlet является абстрактным классом, существуют абстрактные реализации всех doXXX методов, и вам не нужно реализовывать их, если вы этого не хотите.

4 голосов
/ 10 ноября 2010
  1. Да, у вас может быть сервлет без любого из этих методов (у них нет реализации).По-прежнему иметь HttpServlet без doGet / doPost кажется немного бессмысленным, поскольку сервлет может связываться только с ограниченным числом методов запроса, таких как GET, POST, DELETE, PUT (подробнее см. раздел спецификации 5.1.1 ).
  2. HttpServlet не имеет doService методов.Если вы имели в виду void service(), то я советую вам не связываться с этим, если вы действительно не знаете, что делаете.Если все, что вам нужно, это использовать doService, позвоните по номеру doGet, doPost (как кто-то уже предложил).

Хорошо, примеры:

public class DoesNothingServlet extends HttpServlet {} //does what the name implies

public class FormServlet extends HttpServlet { //what you want to do

  protected doGet(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
        doService(request,response)
  }

  protected void doService (HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
        //Do something
  }

}
1 голос
/ 10 ноября 2010

Чтение http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/http/HttpServlet.html

Предоставляет абстрактный класс для создания подкласса для создания HTTP-сервлета, подходящего для веб-сайта.Подкласс HttpServlet должен переопределить хотя бы один метод, обычно один из них:

  • doGet, если сервлет поддерживает запросы HTTP GET
  • doPost, для запросов HTTP POST
  • doPut, для запросов HTTP PUT
  • doDelete, для запросов HTTP DELETE
  • init и destroy, для управления ресурсами, которые хранятся в течение всего срока службы сервлета
  • getServletInfo,который сервлет использует для предоставления информации о себе

Из ваших методов doGet и doPost вы можете вызывать свой метод doService (.., ..), если хотите.

0 голосов
/ 10 ноября 2010

Насколько я понимаю, если я вас правильно понял, вы хотите, чтобы ваш HTTP GET, POST, (PUT, DELETE) вызывал ваш doService метод. Если это так, вы можете сделать это.

protected doGet(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
        doService(request,response)
  }

protected doPost(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
        doService(request,response)
  }

Если вы расширяете HttpServlet, вам не нужно переопределять doGet и doPost, так как это уже реализовано HttpServlet. Запрос сервлета обрабатывается методом service(), который затем (на основе метода HTTP-запроса) вызывает соответствующий метод doXXX.

Я бы не стал связываться с методом service(), если только вы не знаете, что делаете.

0 голосов
/ 10 ноября 2010

Вы заметите, что метод service() происходит от javax.servlet.GenericServlet, а не javax.servlet.http.HttpServlet.

Если вы хотите что-то сделать с сервлетом, который не использует протокол http , я бы сказал, что нужно.

В Head First Servlets и JSP они объясняют это подробно. 99% Вы будете использовать HttpServlet.

При расширении GenericServlet сервлет будет работать независимо от представленного содержимого. Пока URL-адрес запущен, метод service() будет выполняться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...