Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否必须使用doGet或doPost方法?_Java_Servlets - Fatal编程技术网

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

Java 是否必须使用doGet或doPost方法?,java,servlets,Java,Servlets,我有几个问题 我可以拥有一个没有这两个方法的Servlet吗 我可以直接调用我的表单到服务方法。。。像 是的,您可以拥有一个不使用这两种方法的servlet(它们没有实现)。仍然使用HttpServlet而不使用doGet/doPost似乎有点毫无意义,因为servlet只能和有限数量的请求方法进行通信,例如GET,POST,DELETE,PUT(有关更多信息,请参阅) HttpServlet没有doService方法。如果你的意思是void service(),那么我建议你不要搞砸它,除非你

我有几个问题

  • 我可以拥有一个没有这两个方法的Servlet吗
  • 我可以直接调用我的表单到服务方法。。。像
  • 是的,您可以拥有一个不使用这两种方法的servlet(它们没有实现)。仍然使用HttpServlet而不使用doGet/doPost似乎有点毫无意义,因为servlet只能和有限数量的请求方法进行通信,例如
    GET
    POST
    DELETE
    PUT
    (有关更多信息,请参阅)
  • 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
      }
    
    }
    
    阅读

    提供要子类化的抽象类,以创建适用于网站的HTTP servlet。HttpServlet的子类必须重写至少一个方法,通常是以下方法之一:

    • doGet,如果servlet支持HTTP GET请求
    • doPost,用于HTTP POST请求
    • doPut,用于HTTP PUT请求
    • doDelete,用于HTTP删除请求
    • init和destroy,以管理在servlet生命周期内保留的资源
    • getServletInfo,servlet使用它来提供关于自身的信息

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

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

    您会注意到
    服务()
    方法起源于
    javax.servlet.GenericServlet
    而不是
    javax.servlet.http.HttpServlet

    如果你想用一个不涉及http协议的servlet做一些事情,我会说继续

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


    通过扩展
    GenericServlet
    ,servlet将运行,而不考虑提交的内容。只要URL被激活,
    service()
    方法就会执行。

    我的理解是,如果我没有弄错的话,您希望您的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
    实现了。Servlet请求由
    service()
    方法处理,然后该方法(基于HTTP请求方法)调用其相关的
    doXXX
    方法


    不过,除非您知道自己在做什么,否则我不会弄乱
    service()
    方法。

    为什么您想要一个任何人都不能使用的servlet?客户端联系servlet的唯一方式是通过GET、POST、PUT或DELETE。依我拙见
    protected doGet(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
            doService(request,response)
      }
    
    protected doPost(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
            doService(request,response)
      }