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 .
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 .
您永远不会真正调用doGet()
or doPost()
(service() 方法会调用,并且在您阅读生命周期时由 Web 容器调用)。
该service()
方法检测使用的 HTTP 方法并委托给doGet()
,doPost()
以及在HTTPServlet
. 它还将 和 对象封装在ServletRequest
和ServletResponse
对象中HttpServletRequest
,HttpServletResponse
这些对象包含来自 HTTP 标头的附加上下文数据。
感谢@helderdarocha。
更多;
逻辑在 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 特定版本。无需重写此方法。
Request Method 是标准的 HTTP/1.1 令牌,作为请求标头的一部分发送
javax.servlet.http.HttpServlet.service(HttpServletRequest req, HttpServletResponse resp) 包含相应的逻辑。