doGet或doPost方法调用

时间:2014-12-04 11:07:51

标签: java servlets servlet-container

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

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

4 个答案:

答案 0 :(得分:3)

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

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

Tahnks to @helderdarocha。

For more;

答案 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