Tomcat的總體架構圖下: 安全
相關組件的大體介紹以下:服務器
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組件負責對客戶端的請求進行邏輯處理而後把結果返回給客戶端
Connector組件主要是完成對請求報文進行解析生成Request對象、對響應報文進行解析生成Response對象。
Connector組件的架構圖以下:
其包括的主要組件以下:
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組件又被分紅爲兩類:
redirect
就是採用的全局Mapper映射。forward
就是採用的局部Mapper映射。Mapper組件進行路由的時候,首先將3個級別的容器進行樹狀劃分,而後一級一級的尋找到最終的Wrapper組件(Servlet)進行邏輯的處理。
CoyoteAdapter組件:做爲Connector組件和Engine容器之間的適配器。
一個Service組件實例能夠包含多個Connector實例(端口都是不一樣的),一個Connector實例處理一個端口上的請求。
Tomcat的第二大核心組件就是Container(容器)組件,Tomcat中主要由四個級別的容器組件。