servlet container
如何知道是调用doGet
还是doPost
方法。
当我发出get请求时doGet
被调用,当我发出一个帖子请求时doPost
被调用,但是决定这个的逻辑在哪里。
答案 0 :(得分:3)
你永远不会真正调用doGet()
或doPost()
(service()方法,并且在生命周期中读取时由Web容器调用它)。
service()
方法检测使用的HTTP方法,并委托doGet()
,doPost()
以及处理HTTPServlet
中的HTTP请求的其他方法。它还将ServletRequest
和ServletResponse
对象封装在HttpServletRequest
和HttpServletResponse
对象中,这些对象包含来自HTTP标头的其他上下文数据。
Tahnks to @helderdarocha。
答案 1 :(得分: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特定版本。没有必要覆盖此方法。
答案 2 :(得分:0)
javax.servlet.http.HttpServlet.service(HttpServletRequest req,HttpServletResponse resp)包含了该逻辑。
答案 3 :(得分:0)
Request Method是一个标准的HTTP / 1.1令牌,它作为请求头的一部分发送
请参阅: - http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html