Tomcat整體結(jié)構(gòu)簡(jiǎn)單介紹
Tomcat作為web容器廣為人知,從我最開始學(xué)Java一直到現(xiàn)在工作,可以說是伴隨了我的整個(gè)編程生涯。Tomcat的本質(zhì)是一個(gè)Servlet容器。一個(gè)Servlet能做的事情是:處理請(qǐng)求資源,并為客戶端填充response對(duì)象。
Tomcat則負(fù)責(zé)載入我們編寫的Servlet類,調(diào)用Servlet的init()方法,對(duì)于一個(gè)request請(qǐng)求,創(chuàng)建一個(gè)servletRequest和一個(gè)servletResponse實(shí)例,調(diào)用該servlet的service()方法,將servletRequest和servletResponse作為參數(shù)傳入,關(guān)閉該servlet時(shí),調(diào)用destroy()并將其卸載。接下來簡(jiǎn)單介紹一下Tomcat整體的結(jié)構(gòu)。
Tomcat 的總體結(jié)構(gòu)
如圖,Tomcat最主要的為兩個(gè)組件是連接器(connector)和容器(container)。多個(gè)connector和一個(gè)container組成一個(gè)service,service用于對(duì)外提供服務(wù),而service的生命周期由server來控制。server屬于最頂層的抽象。
連接器(connector)用于處理網(wǎng)絡(luò)連接相關(guān)的事情,如socket連接,request封裝,連接線程池等工作。容器(container)主要處理 connector 接受的請(qǐng)求。Service 只是在 Connector 和 Container 外面多包一層,把它們組裝在一起,向外面提供服務(wù),一個(gè) Service 可以設(shè)置多個(gè) Connector,但是只能有一個(gè) Container 容器。所有組件的生命周期都使用lifecycle接口統(tǒng)一管理,里面包含init,start,stop,destory方法。
最初的連接器(connector)只能設(shè)置成BIO模式,現(xiàn)在的高版本Tomcat默認(rèn)的連接模式都是NIO,很大程度上了提升了請(qǐng)求的并發(fā)量。
容器(container)在tomcat中一共有4種形式,從頂至下依次是engine,host,context,wrapper。一個(gè)wrapper則對(duì)應(yīng)一個(gè)servlet,一個(gè)context對(duì)應(yīng)一個(gè)應(yīng)用,一個(gè)host對(duì)應(yīng)一個(gè)站點(diǎn),engine是引擎,一個(gè)容器只有一個(gè)。容器之間的啟動(dòng)都是使用
Tomcat 容器模型
簡(jiǎn)單介紹了下Tomcat整個(gè)的結(jié)構(gòu),下面就通過Tomcat一個(gè)請(qǐng)求的處理流程來加深理解。假設(shè)請(qǐng)求為:http://localhost:8080/test/index.jsp,那么Tomcat的處理流程為
1.請(qǐng)求被發(fā)送到8080端口,被connector獲得。
2.connector把請(qǐng)求交給他所在的service的engine處理,等待engine回應(yīng)。
3.engine獲得請(qǐng)求地址,匹配虛擬主機(jī)host
4.engine匹配到名為localhost的host,該host獲得請(qǐng)求為 /test/index.jsp,匹配該host擁有的context
5.host匹配到路徑為/test的context,若匹配不到則交給名為“空的context處理
6.該context獲得請(qǐng)求/index.jsp,在映射文件中尋找對(duì)應(yīng)的servlet
7.context匹配到模式為*.jsp的servlet,找到對(duì)應(yīng)JspServlet類(Jsp最終會(huì)轉(zhuǎn)換成Servlet)
8.構(gòu)造htttpservletrequest和httpServletResponse對(duì)象,作為參數(shù)調(diào)用JspServlet的doGet或doPost
9.context把response返回給host
10.host把response返回給engine
11.engine把response返回給connector
12.connector把response返回給用戶瀏覽器,請(qǐng)求結(jié)束
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
idea配置tomcat啟動(dòng)web項(xiàng)目的圖文教程
這篇文章主要介紹了idea配置tomcat啟動(dòng)web項(xiàng)目的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09解決運(yùn)行Tomcat之后仍然出現(xiàn)404的問題
這篇文章主要介紹了解決運(yùn)行Tomcat之后仍然出現(xiàn)404的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11WIN2003下IIS6集成一個(gè)或多個(gè)Tomcat的方法
由于IIS配置與PHP的集成網(wǎng)上很多,所以這里我只記錄IIS與JAVA服務(wù)器Tomcat的集成,需要的朋友可以參考下2014-07-07怎么減少本地調(diào)試tomcat重啟次數(shù)你知道嗎
這篇文章主要為大家詳細(xì)介紹了怎么減少本地調(diào)試tomcat重啟次數(shù),使用Groovy,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Idea中tomcat啟動(dòng)源碼調(diào)試進(jìn)入到tomcat內(nèi)部進(jìn)行調(diào)試的方法
這篇文章主要介紹了Idea中tomcat啟動(dòng)源碼調(diào)試進(jìn)入到tomcat內(nèi)部進(jìn)行調(diào)試的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Linux下安裝Tomcat7.0.82的簡(jiǎn)單方法
這篇文章主要介紹了Linux下安裝Tomcat7.0.82的簡(jiǎn)單方法,需要的朋友可以參考下2017-10-10Tomcatc3p0配置jnid數(shù)據(jù)源2種實(shí)現(xiàn)方法解析
這篇文章主要介紹了Tomcatc3p0配置jnid數(shù)據(jù)源2種實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10