Java Servlet 運(yùn)行原理分析
1 Servlet基本執(zhí)行過程
Web容器(如Tomcat)判斷當(dāng)前請(qǐng)求是否第一次請(qǐng)求Servlet程序 。
如果是第一次,則Web容器執(zhí)行以下任務(wù):
- 加載Servlet類。
- 實(shí)例化Servlet類。
- 調(diào)用init方法并傳入ServletConfig對(duì)象
如果不第一次執(zhí)行,則:
- 調(diào)用service方法,并傳入request和response對(duì)象
Web容器在需要?jiǎng)h除Servlet時(shí)(例如,在停止服務(wù)器或重新部署項(xiàng)目時(shí))將調(diào)用destroy方法。
2 Web容器如何處理Servlet請(qǐng)求
Web容器負(fù)責(zé)處理請(qǐng)求。讓我們看看它如何處理請(qǐng)求。
- 將用戶請(qǐng)求與web.xml文件中的Servlet進(jìn)行映射。
- 創(chuàng)建請(qǐng)求和響應(yīng)對(duì)象
- 創(chuàng)建新的線程,并在該線程上調(diào)用Servlet的service方法
- 在public的service方法內(nèi)部調(diào)用protected的service方法
- protected的service方法根據(jù)請(qǐng)求的類型調(diào)用doGet方法。
- doGet方法生成響應(yīng)并將其傳遞給客戶端。
- 發(fā)送響應(yīng)后,Web容器將刪除請(qǐng)求和響應(yīng)對(duì)象。該線程是繼續(xù)留在線程池中還是被刪除取決于服務(wù)器實(shí)現(xiàn)。
3 public的service方法部分源碼
public的service方法將ServletRequest對(duì)象轉(zhuǎn)換為HttpServletRequest類型,而ServletResponse對(duì)象轉(zhuǎn)換為HttpServletResponse類型。然后,調(diào)用傳遞這些對(duì)象的服務(wù)方法。讓我們看一下內(nèi)部代碼:
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方法判斷請(qǐng)求的類型,如果請(qǐng)求類型為GET,則調(diào)用doGet方法,如果請(qǐng)求類型為POST,則調(diào)用doPost方法,依此類推。讓我們看一下內(nèi)部代碼:
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 運(yùn)行原理分析的詳細(xì)內(nèi)容,更多關(guān)于Java Servlet 運(yùn)行原理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java?EventBus手把手帶你實(shí)現(xiàn)
EventBus是Guava的事件處理機(jī)制,是設(shè)計(jì)模式中觀察者模式(生產(chǎn)/消費(fèi)者編程模型)的優(yōu)雅實(shí)現(xiàn)。本文就來(lái)和大家聊聊EventBus的使用,需要的可以參考一下2023-01-01
springmvc path請(qǐng)求映射到bean 方法的流程
這篇文章主要介紹了springmvc path請(qǐng)求映射到bean 方法的流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07
springboot加載命令行參數(shù)ApplicationArguments的實(shí)現(xiàn)
本文主要介紹了springboot加載命令行參數(shù)ApplicationArguments的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
SpringBoot 如何使用Dataway配置數(shù)據(jù)查詢接口
這篇文章主要介紹了SpringBoot 如何使用Dataway配置數(shù)據(jù)查詢接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
詳解Java動(dòng)態(tài)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
本篇文章主要介紹了詳解Java動(dòng)態(tài)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-05-05
Spring MVC 中 AJAX請(qǐng)求并返回JSON的示例
本篇文章主要介紹了Spring MVC 中 AJAX請(qǐng)求并返回JSON,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
利用Sharding-Jdbc組件實(shí)現(xiàn)分表
這篇文章主要為大家詳細(xì)介紹了利用Sharding-Jdbc組件實(shí)現(xiàn)分表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Java設(shè)計(jì)模式之單例模式實(shí)例詳解【懶漢式與餓漢式】
這篇文章主要介紹了Java設(shè)計(jì)模式之單例模式,簡(jiǎn)單說(shuō)明了單例模式的原理并結(jié)合具體實(shí)例形式分析了單例模式中懶漢式與餓漢式的具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-09-09

