Java Servlet 運行原理分析
1 Servlet基本執(zhí)行過程
Web容器(如Tomcat)判斷當前請求是否第一次請求Servlet程序 。
如果是第一次,則Web容器執(zhí)行以下任務:
- 加載Servlet類。
- 實例化Servlet類。
- 調用init方法并傳入ServletConfig對象
如果不第一次執(zhí)行,則:
- 調用service方法,并傳入request和response對象
Web容器在需要刪除Servlet時(例如,在停止服務器或重新部署項目時)將調用destroy方法。
2 Web容器如何處理Servlet請求
Web容器負責處理請求。讓我們看看它如何處理請求。
- 將用戶請求與web.xml文件中的Servlet進行映射。
- 創(chuàng)建請求和響應對象
- 創(chuàng)建新的線程,并在該線程上調用Servlet的service方法
- 在public的service方法內部調用protected的service方法
- protected的service方法根據請求的類型調用doGet方法。
- doGet方法生成響應并將其傳遞給客戶端。
- 發(fā)送響應后,Web容器將刪除請求和響應對象。該線程是繼續(xù)留在線程池中還是被刪除取決于服務器實現。
3 public的service方法部分源碼
public的service方法將ServletRequest對象轉換為HttpServletRequest類型,而ServletResponse對象轉換為HttpServletResponse類型。然后,調用傳遞這些對象的服務方法。讓我們看一下內部代碼:
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);
}
4 protected的service方法部分源碼
protected的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
}
}
以上就是Java Servlet 運行原理分析的詳細內容,更多關于Java Servlet 運行原理的資料請關注腳本之家其它相關文章!
相關文章
springboot加載命令行參數ApplicationArguments的實現
本文主要介紹了springboot加載命令行參數ApplicationArguments的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04
SpringBoot 如何使用Dataway配置數據查詢接口
這篇文章主要介紹了SpringBoot 如何使用Dataway配置數據查詢接口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

