淺談Tomcat之Tomcat結構

Tomcat的總體結構介紹

Tomcat的總體架構圖下: 安全

Aaron Swartz

相關組件的大體介紹以下:服務器

  1. Server組件:Server組件是最頂級的組件,它表明Tomcat的運行實例,在一個JVM中只會包含一個Server。在Server的整個生命週期中,Server組件中的Listener組件實現事件的監聽並完成相應的任務,此外Server中包含的GlobalNamingResources組件是爲了方便在Tomcat中集成JNDI。除了這兩個組件,Server的核心組件就是Service組件
  2. Service組件:Service是服務的抽象,它表明請求從接收處處理的全部組件的集合,一個Server組件能夠包含多個Service組件,每個Service組件都包含了若干的用於接受客戶端消息的Connector組件和處理請求的Engine組件以及一些Executor組件。其中不一樣的Connector組件使用不一樣的通訊協議,如Http協議和AJP協議等。Executor組件是一個線程池,主要是爲Service內的全部組件提供任務所需的線程池。

鏈接器組件

  1. Connector組件:Connector組件的主要職責就是接受客戶端的鏈接而且接受消息報文,消息報文經由Connector的解析以後送往Container組件處理。Tomcat能夠處理Http協議和AJP協議等,所以Connector的分類主要由Http和AJP兩種協議的Connector組件。Service組件和Connector組件的關係圖以下:
    Aaron Swartz
    ,此外,Connector組件中還包含有Mapper組件和CoyoteAdapter組件。 Mapper組件:客戶端請求的路由導航組件,經過它可以對一個完整的請求地址進行路由,從而根據請求地址找到對應的Servlet。 CoyoteAdapter組件:一個將Connector和Container適配起來的適配器。

容器組件

Tomcat內部有4個級別的容器,分別是Engine、Host、Context和Wrapper。架構

Engine組件:app

Engine表明全局的Servlet引擎,每個Service組件只能包含一個Engine容器組件,可是一個Engine組件能夠包含多個Host組件,除了Host組件以外,還包含如下的組件。spa

1. Listener組件:能夠在Tomcat生命週期中完成某一些Engine容器相關工做的監聽器
2. AccessLog組件:客戶端的訪問日誌,全部客戶端訪問都會被記錄
3. Cluster組件:提供集羣功能,能夠將Engine容器須要共享的數據同步到集羣中的其餘班的Tomcat實例上。
4. Pipline組件:Engine容器對請求進行處理的管道
5. Realm組件:提供了Engine容器級別的權限認證的功能。
複製代碼

Host組件:線程

Tomcat中Host組件表明的是虛擬主機,其中存放着若干的抽象的Web應用。Host組件除了包含Context組件以外還包含如下的組件3d

1. Listener組件:能夠在Tomcat生命週期中完成某一些Host容器相關工做的監聽器
2. AccessLog組件:客戶端的訪問日誌,用於記錄指定虛擬主機上全部Web應用的訪問。
3. Cluster組件:提供集羣功能,能夠將Host容器須要共享的數據同步到集羣中的其餘班的Tomcat實例上。
4. Pipline組件:Host容器對請求進行處理的管道
5. Realm組件:提供了Host容器級別的權限認證的功能。
複製代碼

Context組件:日誌

Context組件是Web應用的抽象,其包含了各類靜態資源、若干Servlet(Wrapper容器)以及各類其餘動態資源。其除了包含主要的Wrapper組件以外還包括如下的組件:code

1. Listener組件:能夠在Tomcat生命週期中完成某一些Context容器相關工做的監聽器
2. AccessLog組件:客戶端的訪問日誌,用於記錄對特定Web應用的訪問
3. Pipline組件:Context容器對請求進行處理的管道
4. Realm組件:提供了Context容器級別的權限認證的功能。
5. Loader組件:Loader組件是Web應用的加載器,用於加載Web應用的資源並實如今不一樣Web應用之間資源的隔離
6. Manager組件:會話管理器,用於管理對應Web容器的會話,包括維護會話的生成、更新和銷燬。
7. NamingResource組件:進行資源的命名,其負責將Tomcat配置文件的server.xml和Web應用的context.xml資源和屬性映射到內存中
8. Mapper組件:Servlet映射器,負責Context容器內部請求的路由導航
複製代碼

Wrapper組件:cdn

一個Wrapper組件對應着一個Servlet,其主要包含如下的組件

1. Servlet組件:Servlet是請求處理的基本單元
2. ServletPool組件:Servlet對象池,用於保證Servlet對象的線程安全。
3. Pipeline組件:Wrapper容器對請求進行處理的管道
複製代碼

小結

總之,Tomcat從功能上能夠抽象的看作是由鏈接器組件(Connector)和容器組件(Container)組成。Connector組件負責在服務器端處理客戶端的鏈接,包括接受客戶端的鏈接、接受客戶端的消息,對消息報文進行解析。Container組件負責對客戶端的請求進行邏輯處理而後把結果返回給客戶端

說說Tomcat的Connector組件

Connector組件主要是完成對請求報文進行解析生成Request對象、對響應報文進行解析生成Response對象。

Connector組件的架構圖以下:

Aaron Swartz

其包括的主要組件以下:

Protocol組件:對不一樣協議(如Http協議、AJP協議等)的處理作了抽象。其包含的Endpoint組件是接收端的抽象,對於不一樣的I/O模式,Endpoint也存在多種類型的Endpoint,如BIO模式下的JIoEndpoint,NIO模式下的NioEndpoint和本地庫I/O模式下的AprEndpoint。Endpoint包含的組件Acceptor是專門用於處理客戶端鏈接的接收器組件,Executor是處理客戶端請求的鏈接池組件。Processor組件是處理客戶端請求的處理器。

Protocol組件的類型有:Http11Protocol、Http11NioProtocol、Http11AprProtocol、AjpProtocol、AjpNioProtocol、AjpAprProtocol

Mapper組件:又稱請求URI映射器Mapper,提供對客戶端請求URL地址的映射功能,Tomcat經過Connector中包含的Mapper組件將請求轉發給對應的Host組件、Context組件和Wrapper組件,最終實現Tomcat將客戶端的請求路由處處理業務邏輯的Servlet上。Mapper組件又被分紅爲兩類:

  1. Connector中的Mapper負責全局路由。在程序的編寫過程當中,應用程序與應用程序之間的重定向redirect就是採用的全局Mapper映射。
  2. Context中的Mapper負責局部路由,局部路由Mapper只存在於Context容器中,負責記錄訪問資源與Wrapper之間的映射。在程序的編寫過程當中,應用程序內部的轉發forward就是採用的局部Mapper映射。

Mapper組件進行路由的時候,首先將3個級別的容器進行樹狀劃分,而後一級一級的尋找到最終的Wrapper組件(Servlet)進行邏輯的處理。

CoyoteAdapter組件:做爲Connector組件和Engine容器之間的適配器。

一個Service組件實例能夠包含多個Connector實例(端口都是不一樣的),一個Connector實例處理一個端口上的請求。

說說Tomcat的Container組件

Tomcat的第二大核心組件就是Container(容器)組件,Tomcat中主要由四個級別的容器組件。

  1. Engine容器:爲全局引擎容器,其標準實現爲StandardEngine。Engine是一個全局Servlet容器,一個Engine容器能夠包含多個Host容器。
  2. Host容器:Host組件是Engine容器的子組件,它表明一個虛擬主機,其標準實現爲StandardHost。一個Host容器能夠包含多個Context容器。
  3. Context容器:一個Context組件對應一個Web應用程序,Context容器能夠實現將Web項目中包含的組件轉化成容器中的組件。
  4. Wrapper容器:一個Wrapper組件對應一個Servlet對象或者一個Servlet對象池。Wrapper組件用於處理請求的具體邏輯,
相關文章
相關標籤/搜索