Servlet是如何工作的?
瞭解servlet如何工作對了解servlet內部工作流程很重要。 在這裏,我們將以第一個servlet程式來講解它的內部細節。
伺服器檢查servlet是否為第一次被請求?
如果是第一次被請求,則 -
- 加載servlet類。
- 實例化servlet類。
- 調用
init
方法傳遞ServletConfig
對象
如果不是第一次被請求,則 -
- 調用
service
方法傳遞請求和回應對象
Web容器在需要刪除servlet時調用destroy
方法,例如:在停止伺服器或取消部署專案時。
Web容器如何處理servlet請求?
Web容器負責處理請求。下麵來看看看它如何處理請求。
- 將請求與web.xml檔中的servlet進行映射。
- 為請求創建請求和回應對象
- 調用線程上的
service
方法 - 公共
service
方法內部調用受保護的service
方法 - 受保護的
service
方法根據請求的類型調用doGet
方法。 doGet
方法生成回應,並將其傳遞給客戶端。- 發送回應後,Web容器將刪除請求和回應對象。線程包含線上程池中或刪除取決於伺服器實現。
在公共service方法中寫什麼?
公共service
方法將ServletRequest
對象轉換為HttpServletRequest
類型和ServletResponse
對象轉為HttpServletResponse
類型。然後調用傳遞這些對象的service
方法。下麵來看看內部代碼:
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
HttpServletRequest request;
HttpServletResponse response;
try
{
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
}
catch(ClassCastException e)
{
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}
在受保護的service方法中編寫什麼?
受保護的service
方法檢查請求的類型,如果請求類型為get
,則調用doGet
方法,如果請求類型為post
,則調用doPost
方法。下麵來看看內部代碼:
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String method = req.getMethod();
if(method.equals("GET"))
{
long lastModified = getLastModified(req);
if(lastModified == -1L)
{
doGet(req, resp);
}
....
//rest of the code
}
}
上一篇:
Servlet生命週期
下一篇:
War檔