1

How does the servlet container know whether to call doGet or doPost method.

When I make a get request doGet is called, When I make a post request doPost is called , but where is the logic to decide this .

4

4 回答 4

3

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

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

感谢@helderdarocha。

更多

于 2014-12-04T11:16:34.010 回答
1

逻辑在 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 特定版本。无需重写此方法。

于 2014-12-04T11:25:58.177 回答
0

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

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

于 2014-12-04T11:19:37.600 回答
0

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

于 2014-12-04T11:17:33.677 回答