Tomcat系統(tǒng)架構(gòu)介紹_第1頁(yè)
Tomcat系統(tǒng)架構(gòu)介紹_第2頁(yè)
Tomcat系統(tǒng)架構(gòu)介紹_第3頁(yè)
Tomcat系統(tǒng)架構(gòu)介紹_第4頁(yè)
Tomcat系統(tǒng)架構(gòu)介紹_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 Tomcat系統(tǒng)架構(gòu)介紹Tomcat的結(jié)構(gòu)很復(fù)雜,但它非常的模塊化,找到Tomcat最核心的模塊,問(wèn)題就可以游刃而解。了解Tomcat的整體架構(gòu)對(duì)日后深入了解Tomcat來(lái)說(shuō)至關(guān)重要!一、Tomcat頂層架構(gòu)先上一張Tomcat的頂層結(jié)構(gòu)圖(圖A),如下:(圖A)Tomcat中最頂層的容器是Server,代表著整個(gè)服務(wù)器,從上圖中可以看出,一個(gè)Server可以包含至少一個(gè)Service,用于具體提供服務(wù)。Service主要包含兩個(gè)部分:Connector和Container。從上圖中可以看出 Tomcat 的心臟就是這兩個(gè)組件,它們的作用如下:Connector用于處理連接相關(guān)的事情,并提供

2、Socket與Request和Response相關(guān)的轉(zhuǎn)化;Container用于封裝和管理Servlet,以及具體處理Request請(qǐng)求。一個(gè)Tomcat中只有一個(gè)Server,一個(gè)Server可以包含多個(gè)Service,一個(gè)Service只有一個(gè)Container,但是可以有多個(gè)Connectors,這是因?yàn)橐粋€(gè)服務(wù)可以有多個(gè)連接,如同時(shí)提供Http和Https鏈接,也可以提供向相同協(xié)議不同端口的連接,示意圖如下(Engine、Host、Context下邊會(huì)說(shuō)到):多個(gè) Connector 和一個(gè) Container 就形成了一個(gè) Service,有了 Service 就可以對(duì)外提供服務(wù)了。

3、但 Service 還要一個(gè)生存的環(huán)境,必須要有人能夠給它生命、掌握其生死大權(quán),而這就非 Server 莫屬。所以,整個(gè) Tomcat 的生命周期由 Server 控制。另外,上述的包含關(guān)系或者說(shuō)是父子關(guān)系,都可以在Tomcat的conf目錄下的server.xml配置文件中看出,下圖是刪除了注釋內(nèi)容之后的一個(gè)完整的server.xml配置文件(Tomcat版本為8.0)詳細(xì)的配置文件文件內(nèi)容可以到Tomcat官網(wǎng)查看:/tomcat-8.0-doc/index.html上邊的配置文件,還可以通過(guò)下面這張結(jié)構(gòu)圖更清楚地理解:Server標(biāo)簽設(shè)置的端口號(hào)為8005,shutdown=”SHUTD

4、OWN” ,表示在8005端口監(jiān)聽(tīng)“SHUTDOWN”命令,如果接收到了就會(huì)關(guān)閉Tomcat。一個(gè)Server有一個(gè)Service,當(dāng)然還可以進(jìn)行配置,一個(gè)Service有多個(gè),Service左邊的內(nèi)容都屬于Container的,Service下邊是Connector。二、Tomcat頂層架構(gòu)小結(jié)Tomcat中只有一個(gè)Server,一個(gè)Server可以有多個(gè)Service,一個(gè)Service可以有多個(gè)Connector和一個(gè)Container;Server掌管著整個(gè)Tomcat的生死大權(quán);Service 是對(duì)外提供服務(wù)的;Connector用于接受請(qǐng)求并將請(qǐng)求封裝成Request和Respon

5、se來(lái)具體處理;Container用于封裝和管理Servlet,以及具體處理request請(qǐng)求。以上是整個(gè)Tomcat頂層的分層架構(gòu)和各個(gè)組件之間的關(guān)系以及作用,對(duì)于絕大多數(shù)的開(kāi)發(fā)人員來(lái)說(shuō),Server和Service對(duì)我們來(lái)說(shuō)確實(shí)很遠(yuǎn),而開(kāi)發(fā)中絕大部分進(jìn)行配置的內(nèi)容是屬于Connector和Container的,所以接下來(lái)介紹一下Connector和Container。三、Connector和Container的微妙關(guān)系由上述內(nèi)容我們大致可以知道:一個(gè)請(qǐng)求發(fā)送到Tomcat之后,首先經(jīng)過(guò)Service然后會(huì)交給我們的Connector,Connector用于接收請(qǐng)求,并將接收的請(qǐng)求封裝為Re

6、quest和Response來(lái)具體處理。Request和Response封裝完之后再交由Container進(jìn)行處理,Container處理完請(qǐng)求之后再返回給Connector,最后在由Connector通過(guò)Socket將處理的結(jié)果返回給客戶(hù)端,這樣整個(gè)請(qǐng)求的就處理完了!Connector最底層使用的是Socket來(lái)進(jìn)行連接的,Request和Response是按照HTTP協(xié)議來(lái)封裝的,所以Connector同時(shí)需要實(shí)現(xiàn)TCP/IP協(xié)議和HTTP協(xié)議。Tomcat既然處理請(qǐng)求,那么肯定需要先接收到這個(gè)請(qǐng)求,而想要接收請(qǐng)求這個(gè)東西,我們首先就需要看一下Connector。四、Connector架構(gòu)

7、分析Connector用于接受請(qǐng)求并將請(qǐng)求封裝成Request和Response,然后交給Container進(jìn)行處理,Container處理完之后在交給Connector返回給客戶(hù)端。因此,我們可以把Connector分為四個(gè)方面進(jìn)行理解:(1)Connector如何接受請(qǐng)求的?(2)如何將請(qǐng)求封裝成Request和Response的?(3)封裝完之后的Request和Response如何交給Container進(jìn)行處理的?(4)Container處理完之后如何交給Connector并返回給客戶(hù)端的?首先看一下Connector的結(jié)構(gòu)圖(圖B):(圖B)Connector就是使用Protocol

8、Handler來(lái)處理請(qǐng)求的,不同的ProtocolHandler代表不同的連接類(lèi)型,比如:Http11Protocol使用的是普通Socket來(lái)連接的,Http11NioProtocol使用的是NioSocket來(lái)連接的。其中ProtocolHandler由包含了三個(gè)部件:Endpoint、Processor、Adapter。Endpoint用來(lái)處理底層Socket的網(wǎng)絡(luò)連接,Processor用于將Endpoint接收到的Socket封裝成Request,Adapter用于將Request交給Container進(jìn)行具體的處理。Endpoint由于是處理底層的Socket網(wǎng)絡(luò)連接,因此Endp

9、oint是用來(lái)實(shí)現(xiàn)TCP/IP協(xié)議的,而Processor用來(lái)實(shí)現(xiàn)HTTP協(xié)議的,Adapter將請(qǐng)求適配到Servlet容器進(jìn)行具體的處理。Endpoint的抽象實(shí)現(xiàn)AbstractEndpoint里面定義的Acceptor和AsyncTimeout兩個(gè)內(nèi)部類(lèi)和一個(gè)Handler接口。Acceptor用于監(jiān)聽(tīng)請(qǐng)求,AsyncTimeout用于檢查異步Request的超時(shí),Handler用于處理接收到的Socket,在內(nèi)部調(diào)用Processor進(jìn)行處理。至此,我們應(yīng)該很輕松回答了(1)(2)(3)的問(wèn)題,但(4)還是不知道。接下來(lái)我們就來(lái)看一下Container是如何進(jìn)行處理的,以及處理完之后

10、是如何將處理完的結(jié)果返回給Connector的。五、Container架構(gòu)分析Container用于封裝和管理Servlet,以及具體處理Request請(qǐng)求,在Connector內(nèi)部包含了4個(gè)子容器,結(jié)構(gòu)圖如下(圖C):(圖C)4個(gè)子容器的作用分別是:(1)Engine:引擎,用來(lái)管理多個(gè)站點(diǎn),一個(gè)Service最多只能有一個(gè)Engine;(2)Host:代表一個(gè)站點(diǎn),也可以叫虛擬主機(jī),通過(guò)配置Host就可以添加站點(diǎn);(3)Context:代表一個(gè)應(yīng)用程序,對(duì)應(yīng)著平時(shí)開(kāi)發(fā)的一套程序,或者一個(gè)WEB-INF目錄以及下面的web.xml文件;(4)Wrapper:每一Wrapper封裝著一個(gè)Ser

11、vlet。下面找一個(gè)Tomcat的文件目錄對(duì)照一下:Context和Host的區(qū)別是Context表示一個(gè)應(yīng)用,我們的Tomcat中默認(rèn)的配置下webapps下的每一個(gè)文件夾目錄都是一個(gè)Context,其中ROOT目錄中存放著主應(yīng)用,其他目錄存放著子應(yīng)用,而整個(gè)webapps就是一個(gè)Host站點(diǎn)。我們?cè)L問(wèn)應(yīng)用Context的時(shí)候,如果是ROOT下的則直接使用域名就可以訪問(wèn),例如:,如果是Host(webapps)下的其他應(yīng)用,則可以使用/docs進(jìn)行訪問(wèn)。當(dāng)然默認(rèn)指定的根應(yīng)用(ROOT)是可以進(jìn)行設(shè)定的,只不過(guò)Host站點(diǎn)下默認(rèn)的主營(yíng)用是ROOT目錄下的。看到這里我們知道Container是什

12、么,但還是不知道Container是如何進(jìn)行處理的,以及處理完之后是如何將處理完的結(jié)果返回給Connector的。別急,下邊就開(kāi)始探討一下Container是如何進(jìn)行處理的。六、Container如何處理請(qǐng)求的Container處理請(qǐng)求是使用Pipeline-Valve管道來(lái)處理的!(Valve是閥門(mén)之意)Pipeline-Valve是責(zé)任鏈模式,責(zé)任鏈模式是指在一個(gè)請(qǐng)求處理的過(guò)程中有很多處理者依次對(duì)請(qǐng)求進(jìn)行處理,每個(gè)處理者負(fù)責(zé)做自己相應(yīng)的處理,處理完之后將處理后的請(qǐng)求返回,再讓下一個(gè)處理著繼續(xù)處理。但是,Pipeline-Valve使用的責(zé)任鏈模式和普通的責(zé)任鏈模式有些不同,區(qū)別主要有以下兩

13、點(diǎn):(1)每個(gè)Pipeline都有特定的Valve,而且是在管道的最后一個(gè)執(zhí)行,這個(gè)Valve叫做BaseValve,BaseValve是不可刪除的;(2)在上層容器的管道的BaseValve中會(huì)調(diào)用下層容器的管道。我們知道Container包含四個(gè)子容器,而這四個(gè)子容器對(duì)應(yīng)的BaseValve分別在:StandardEngineValveStandardHostValveStandardContextValveStandardWrapperValvePipeline的處理流程圖如下(圖D):(圖D)(1)Connector在接收到請(qǐng)求后會(huì)首先調(diào)用最頂層容器的Pipeline來(lái)處理,這里的最頂

14、層容器的Pipeline就是EnginePipeline(Engine的管道)。(2)在Engine的管道中依次會(huì)執(zhí)行EngineValve1、EngineValve2等等,最后會(huì)執(zhí)行StandardEngineValve,在StandardEngineValve中會(huì)調(diào)用Host管道,然后再依次執(zhí)行Host的HostValve1、HostValve2等,最后在執(zhí)行StandardHostValve,然后再依次調(diào)用Context的管道和Wrapper的管道,最后執(zhí)行到StandardWrapperValve。(3)當(dāng)執(zhí)行到StandardWrapperValve的時(shí)候,會(huì)在StandardWrapperValve中創(chuàng)建FilterChain,并調(diào)用其doFilter方法來(lái)處理請(qǐng)求,這個(gè)FilterChain包含著我們配置的與請(qǐng)求相匹配的Filter和Servlet,其doFilter方法會(huì)依次調(diào)用所有的Filter的doFilter方法和Servlet的service方法,這樣請(qǐng)求就得到了

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論