Tomcat

數(shù)據(jù)存儲和消息隊列

Tomcat

1. Tomcat的基礎架構(Server、Service、Connector、Container)

Tomcat的頂層容器是Server代表整個服務器。一個Server可以包含至少一個Service,用于提供具體服務。
Service包含兩部分:Connectior:用于處理連接相關的事情,并提供Socket與Request和Response相關的轉化。以及Container:用于封裝和管理Servlet以及處理具體Request請求。

一個Tomcat中只有一個Server,一個Server可以包含多個Service,一個Service只有一個Container但可以存在多個Connectors,因為服務可以由多個連接(如同時提供Http和Https連接,也可以提供向相同協(xié)議不同端口的鏈接)。

多個Connector和一個Container形成了一個Service。Service對外提供服務,而整個Tomcat的生命周期由Server控制。我們開發(fā)中絕大部分進行配置的內(nèi)容是屬于Connector和Container的。

請求流程:

  1. 請求發(fā)送到Tomcat之后,首先經(jīng)過Service然后教給Connector
  2. Connector接收請求并將接收的請求封裝為Request和Response來具體處理,封裝完成后再交由Container進行處理。
  3. Container處理完請求之后再返回給Connector,由Connector通過Socket將處理的結果返回給客戶端。

Connector使用ProtocolHandler來處理請求的,不同的ProtocolHandler代表不同的連接類型。它包含了三個組件:
--> Endpoint:用于處理底層Socket的網(wǎng)絡連接,實現(xiàn)TCP/IP協(xié)議,它的抽象實現(xiàn)AbstractEndpoint里面定義了Acceptor和AsyncTimeout兩個內(nèi)部類和一個Handler接口。Acceptor用于監(jiān)聽請求,,AsyncTimeout用于檢查異步Request的超時,Handler用于處理接收到的Socket,在內(nèi)部調用Processor進行處理。
--> Processor:用于將Endpoint接收到的Socket封裝成Request,它實現(xiàn)Http協(xié)議。
--> Adapter:用于將Request交給Container進行具體的處理。

Container內(nèi)部包含四個子容器:
--> Engine:引擎。用來管理多個站點。一個Service最多只能有一個Engine。
--> Host:代表一個站點,虛擬主機,通過配置Host就可以添加站點。
--> Context:代表一個應用程序,對應著平時開發(fā)的一套程序,或者一個WEB-INF目錄以及下面的web.xml文件。Tomcat默認的配置下webapp下的每一個文件夾目錄都是一個Context,ROOT目錄存放主應用,其他目錄存放子應用。而整個webapp就是一個Host站點。
--> Wrapper:每一個Wrapper封裝著一個Servlet

2. Tomcat如何加載Servlet的

請參見下面第三題最后部分(從FilterChain部分開始)。

3. Pipeline-Valve機制

Pipeline-value屬于責任鏈模式。
普通責任鏈模式指在一個請求處理的過程中有很多處理者依次對請求進行處理,每個處理者負責做自己相應的處理,處理完成之后將處理后的請求返回,再讓下一個處理者繼續(xù)處理。

但Pipeline-Value使用的責任鏈模式與普通責任鏈有不同。

  1. 每個PipeLine都有特定的value。而且是在管道的最后一個執(zhí)行。這個value叫做BaseValue,它是不可刪除的。
  2. 上層容器的管道的BaseValue中會調用下層容器的管道。

Connector接到請求后首先調用最頂層容器的Pipeline來處理(EnginePipeline)。在Engine的管道中依次執(zhí)行EngineValue1,EngineValue2等等,最后執(zhí)行StandardEngineValue,在這里會調用Host管道,再依次執(zhí)行HostValue1,HostValue2,最后執(zhí)行StandardHostValue,然后再依次調用Context和Wrapper的管道。

最后執(zhí)行StandaradWrapperValue時,在其中創(chuàng)建FilterChain,并調用其doFilter方法來處理請求。這個FilterChain包含著我們配置的與請求相匹配的Filter和Servlet。其doFilter方法會依次調用所有的Filter的doFilter方法和Servlet的service方法,這樣請求就得到了處理。這時將返回結果交還給Connector,Connector再通過Socket的方式將結果返回給客戶端。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容