2014-12-04 75 views
1

servlet container如何知道是否調用doGetdoPost方法。doGet或doPost方法調用

當我發出獲取請求doGet被調用時,當我發出一個請求doPost被調用,但在哪裏是邏輯來決定這一點。

回答

3

你永遠不會真的打電話doGet()doPost()(service()方法將會在生命週期中讀取時由Web容器調用它)。

service()方法檢測使用的HTTP方法,並委託doGet()doPost()和其他處理HTTPServlet中的HTTP請求的方法。它還將ServletRequestServletResponse對象封裝在包含來自HTTP標頭的附加上下文數據的對象HttpServletRequestHttpServletResponse中。

Tahnks to @helderdarocha。

For more;

0

javax.servlet.http.HttpServlet.service(HttpServletRequest req,HttpServletResponse resp)包含該邏輯。

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特定版本。沒有必要重寫此方法。

相關問題