Tomcat架構分析和數據處理過程剖析

Tomcat因爲是開源免費的並且有着很好的使用價值,深受中小型企業的歡迎,也是我們學習Java web開發中必須掌握的內容,這次就來深層解析一下Tomcat的內部架構的實現。

一、Tomcat結構介紹

Tomcat的結構很複雜,但是 Tomcat 非常的模塊化,找到了 Tomcat最核心的模塊,問題纔可以遊刃而解,瞭解了Tomcat的整體架構對以後深入瞭解。Tomcat來說至關重要!Tomcat是非常常用的應用服務器,瞭解Tomcat的總體架構以及實現細節,對於理解整個java web也是有非常大的幫助。

二、Tomcat的數據處理/返回流程

一個請求發送到Tomcat之後,首先經過Service然後會交給Connector,Connector用於接收請求並將接收的請求封裝爲Request和Response來具體處理,Request和Response封裝完之後再交由Container進行處理,Container處理完請求之後再返回給Connector,最後在由Connector通過Socket將處理的結果返回給客戶端,這樣整個請求的就處理完了!
Connector最底層使用的是Socket來進行連接的,Request和Response是按照HTTP協議來封裝的,所以Connector同時需要實現TCP/IP協議和HTTP協議!

三、Tomcat的底層構架

(1)頂層
① Tomcat中只有一個Server,一個Server可以有多個Service,一個Service可以有多個Connector和一個Container;
② Server掌管着整個Tomcat的生死大權;
③ Service 是對外提供服務的;
④ Connector用於接受請求並將請求封裝成Request和Response來具體處理;
⑤ Container用於封裝和管理Servlet,以及具體處理request請求;
在這裏插入圖片描述

Tomcat中最頂層的容器是Server,代表着整個服務器,一個Server可以包含至少一個Service,用於具體提供服務。
Service主要包含兩個部分:Connector和Container。可以看出 Tomcat 的心臟就是這兩個組件,他們的作用如下:
① Connector用於處理連接相關的事情,並提供Socket與Request和Response相關的轉化;
② Container用於封裝和管理Servlet,以及具體處理Request請求;

一個Tomcat中只有一個Server,一個Server可以包含多個Service,一個Service只有一個Container,但是可以有多個Connectors,這是因爲一個服務可以有多個連接,如同時提供Http和Https鏈接,也可以提供向相同協議不同端口的連接。
(2)Connector容器
Connector用於接受請求並將請求封裝成Request和Response,然後交給Container進行處理。
在這裏插入圖片描述
Connector就是使用ProtocolHandler來處理請求的,不同的ProtocolHandler代表不同的連接類型,比如:Http11Protocol使用的是普通Socket來連接的,Http11NioProtocol使用的是NioSocket來連接的。
其中ProtocolHandler由包含了三個部件:Endpoint、Processor、Adapter。
(1)Endpoint用來處理底層Socket的網絡連接,Processor用於將Endpoint接收到的Socket封裝成Request,Adapter用於將Request交給Container進行具體的處理。
(2)Endpoint由於是處理底層的Socket網絡連接,因此Endpoint是用來實現TCP/IP協議的,而Processor用來實現HTTP協議的,Adapter將請求適配到Servlet容器進行具體的處理。
(3)Endpoint的抽象實現AbstractEndpoint裏面定義的Acceptor和AsyncTimeout兩個內部類和一個Handler接口。Acceptor用於監聽請求,AsyncTimeout用於檢查異步Request的超時,Handler用於處理接收到的Socket,在內部調用Processor進行處理。
(3)Container容器
Container接收到Connector的數據後,處理完之後在交給Connector返回給客戶端。 Container用於封裝和管理Servlet,以及具體處理Request請求,在Connector內部包含了4個子容器。
在這裏插入圖片描述
4個子容器的作用分別是:
① Engine:引擎,用來管理多個站點,一個Service最多只能有一個Engine;
② Host:代表一個站點,也可以叫虛擬主機,通過配置Host就可以添加站點;
③ Context:代表一個應用程序,對應着平時開發的一套程序,或者一個WEB-INF目錄以及下面的web.xml文件;
④ Wrapper:每一Wrapper封裝着一個Servlet;
(4)Container的處理流程
Container處理請求是使用Pipeline-Value管道來處理的!Pipeline-Value是責任鏈模式,責任鏈模式是指在一個請求處理的過程中有很多處理者依次對請求進行處理,每個處理者負責做自己相應的處理,處理完之後將處理後的請求返回,再讓下一個處理着繼續處理。
在這裏插入圖片描述
① Connector在接收到請求後會首先調用最頂層容器的Pipeline來處理,這裏的最頂層容器的Pipeline就是EnginePipeline(Engine的管道);
② 在Engine的管道中依次會執行EngineValue1、EngineValue2等等,最後會執行StandardEngineValue,在StandardEngineValue中會調用Host管道,然後再依次執行Host的HostValue1、HostValue2等,最後在執行StandardHostValue,然後再依次調用Context的管道和Wrapper的管道,最後執行到StandardWrapperValue。
③ 當執行到StandardWrapperValue的時候,會在StandardWrapperValue中創建FilterChain,並調用其doFilter方法來處理請求,這個FilterChain包含着我們配置的與請求相匹配的Filter和Servlet,其doFilter方法會依次調用所有的Filter的doFilter方法和Servlet的service方法,這樣請求就得到了處理!
④ 當所有的Pipeline-Value都執行完之後,並且處理完了具體的請求,這個時候就可以將返回的結果交給Connector了,Connector在通過Socket的方式將結果返回給客戶端。
(5)整體框架
在這裏插入圖片描述
圖中所示的就是Tomcat底層框架的全部內容展示,可以清楚直觀的明白Tomcat底層內部的組件和他們之間的相互作用,更有助於我們瞭解Tomcat處理數據請求和發送數據的過程了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章