【问题标题】:doGet or doPost method invocation [duplicate]doGet 或 doPost 方法调用 [重复]
【发布时间】:2014-12-04 11:07:50
【问题描述】:

servlet container如何知道是调用doGet还是doPost方法。

当我发出 get 请求时,doGet 被调用,当我发出 post 请求时,doPost 被调用,但是决定这个的逻辑在哪里。

【问题讨论】:

    标签: java servlets servlet-container


    【解决方案1】:

    您永远不会真正调用doGet()doPost()(service() 方法会调用,并且在您阅读生命周期时由Web 容器调用)。

    service() 方法检测使用的 HTTP 方法,并委托给doGet()doPost() 和其他在HTTPServlet 中处理 HTTP 请求的方法。它还将ServletRequestServletResponse 对象封装在HttpServletRequestHttpServletResponse 对象中,这些对象包含来自HTTP 标头的附加上下文数据。

    感谢@helderdarocha。

    For more;

    【讨论】:

      【解决方案2】:

      逻辑在 HTTP 协议中,它由 servlet 容器(Tomcat、Glassfish、Jetty...)管理

      请求的第一个词(在 TCP 级别)是 HTTP 动词,通常是 GET 或 POST,但也可以是 DELETE、PUT、OPTIONS、HEAD、TRACE...

      servlet 容器调用servlet 的service 方法,但HttpServlet.service 方法的默认实现包含调度到正确方法的逻辑。从 Javadoc 中提取:

      public void service(ServletRequest req,
                      ServletResponse res)
               throws ServletException,
                      java.io.IOException
      

      将客户端请求分派到受保护的服务方法。无需重写此方法。

      protected void service(HttpServletRequest req,
                         HttpServletResponse resp)
                  throws ServletException,
                         java.io.IOException
      

      从公共服务方法接收标准 HTTP 请求并将它们分派到此类中定义的 doXXX 方法。此方法是 Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) 方法的 HTTP 特定版本。无需重写此方法。

      【讨论】:

        【解决方案3】:

        javax.servlet.http.HttpServlet.service(HttpServletRequest req, HttpServletResponse resp) 包含相应的逻辑。

        【讨论】:

          【解决方案4】:

          Request Method 是标准的 HTTP/1.1 令牌,作为请求标头的一部分发送

          请参考:- http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html

          【讨论】:

            猜你喜欢
            • 2014-02-11
            • 2011-08-18
            • 2012-02-27
            • 1970-01-01
            • 2016-02-15
            • 2013-06-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多