servlet container
如何知道是否調用doGet
或doPost
方法。doGet或doPost方法調用
當我發出獲取請求doGet
被調用時,當我發出一個請求doPost
被調用,但在哪裏是邏輯來決定這一點。
servlet container
如何知道是否調用doGet
或doPost
方法。doGet或doPost方法調用
當我發出獲取請求doGet
被調用時,當我發出一個請求doPost
被調用,但在哪裏是邏輯來決定這一點。
你永遠不會真的打電話doGet()
或doPost()
(service()方法將會在生命週期中讀取時由Web容器調用它)。
service()
方法檢測使用的HTTP方法,並委託doGet()
,doPost()
和其他處理HTTPServlet
中的HTTP請求的方法。它還將ServletRequest
和ServletResponse
對象封裝在包含來自HTTP標頭的附加上下文數據的對象HttpServletRequest
和HttpServletResponse
中。
Tahnks to @helderdarocha。
javax.servlet.http.HttpServlet.service(HttpServletRequest req,HttpServletResponse resp)包含該邏輯。
請求方法是一個標準的HTTP/1.1令牌,該令牌被髮送作爲請求頭的一部分
請參考: - http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html
的邏輯是在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特定版本。沒有必要重寫此方法。