是否必须使用doGet或doPost方法?

时间:2010-11-10 10:33:11

标签: java servlets

我几乎没有问题。

  1. 我可以在没有这两种方法的情况下使用Servlet吗?
  2. 我可以直接将我的表单调用到Service方法......比如
  3. 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 个答案:

答案 0 :(得分:4)

  1. 是的,您可以拥有一个没有这些方法的servlet(它们没有实现)。在没有doGet / doPost的情况下仍然拥有HttpServlet似乎有点无意义,因为servlet只能与有限数量的请求方法进行通信,例如GETPOSTDELETE,{{1 (更多请参阅specification section 5.1.1)。
  2. HttpServlet没有PUT方法。如果你的意思是doService那么我建议你不要弄乱它,除非你真的知道你在做什么。 如果你只需要void service()使用doServicedoGet(就像有人建议的那样)来调用它。
  3. 好的,例子:

    doPost

答案 1 :(得分:4)

不,这不是强制性的。由于HttpServlet是一个抽象类,因此所有doXXX方法都有抽象实现,如果您不想这样做,则不必实现它们。

答案 2 :(得分:1)

阅读http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/http/HttpServlet.html

  

提供要进行子类化的抽象类,以创建适用于Web站点的HTTP Servlet。 HttpServlet的子类必须至少覆盖一个方法,通常是以下方法之一:

     
      
  • doGet,如果servlet支持HTTP GET请求
  •   
  • doPost,用于HTTP POST请求
  •   
  • doPut,用于HTTP PUT请求
  •   
  • doDelete,用于HTTP DELETE请求
  •   
  • 初始化和销毁​​,以管理为servlet生命周期而持有的资源
  •   
  • getServletInfo,servlet用来提供有关自身的信息
  •   

如果您愿意,可以从doGet和doPost方法调用doService(..,..)方法。

答案 3 :(得分:0)

您会注意到service()方法来自javax.servlet.GenericServlet而不是javax.servlet.http.HttpServlet

如果你想对一个不涉及 http协议的servlet做点什么,我会说继续。

在Head First Servlets和JSP中,他们详细解释了这一点。 99%您将使用HttpServlet

通过扩展GenericServlet,无论提交的内容如何,​​servlet都会运行。只要触发了URL,就会执行service()方法。

答案 4 :(得分:0)

我的理解是,如果我说得对,你想要你的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,则不必覆盖doGetdoPost,因为它已由HttpServlet实施。 Servlet请求由service()方法处理,然后(基于HTTP请求方法)调用其相关的doXXX方法。

我不会弄乱service()方法,除非你知道你在做什么。