一、Tomcat 容器的總體架構(gòu)
Tomcat 容器主要用來提供servlet運(yùn)行環(huán)境,對其生命期進(jìn)行管理,從而提供各種服務(wù)service。
Tomcat 的兩大核心組件:Connector和Container共同組成了各種服務(wù)。如下圖所示:

Tomcat總體架構(gòu)分析圖
Connector
connector主要用于監(jiān)聽各種協(xié)議的發(fā)送的請求,并創(chuàng)建出請求響應(yīng)的Request和Response對象。
之后創(chuàng)建一個處理該請求的線程,傳入request和response對象,并提交到container中,等待container執(zhí)行。
另外Connector有多種實(shí)現(xiàn),一個Tomcat容器中通常具有一個Connector組成的集合。
Container
Container包含一個責(zé)任鏈設(shè)計(jì)模式,層層調(diào)用最終通過Servlet的包裝wrapper實(shí)現(xiàn)請求的調(diào)用。
Service與Server
Service是一個接口,負(fù)責(zé)管理Connector和Container。其標(biāo)準(zhǔn)實(shí)現(xiàn)類StandardService由Connector和Container組成。
Service接口同時也繼承了LifeCycle接口,方便對tomcat中各個組件的整體生命周期進(jìn)行管理。
Server接口負(fù)責(zé)管理Tomcat中的Service集合。通過Server接口,tomcat實(shí)現(xiàn)管理和運(yùn)行service,對外部暴露應(yīng)用。
二、Connector詳解
Connector的重要作用在于:接受請求,封裝請求和相應(yīng)對象,創(chuàng)建線程任務(wù)交給Container處理
Connector的信息可以在server.xml配置文件中看到。明顯的可以看到8080是TCP連接端口,8009是Apache服務(wù)器和tomcat
通信使用的端口等。
Connector在server start時進(jìn)行初始化,之后等待請求到來,通過httpProcessor包裝線程和請求對象,交給container處理。
流程如下圖所示:

請求處理時序圖
三、Container詳解
Tomcat容器中,Container實(shí)際上是用責(zé)任鏈設(shè)計(jì)模式。Container是所有容器的父接口,任何一種容器實(shí)現(xiàn)。
它具有四個子容器:Engine,Host,Context,Wrapper;四者成父子關(guān)系
Engine是整個tomcat容器的完整servlet引擎,通過它在最上層調(diào)用;
Host代表Engine中的一個虛擬機(jī),這個Host的作用在于運(yùn)行多個應(yīng)用并區(qū)分它們(Context);
Context是Servlet的基本運(yùn)行環(huán)境,它維護(hù)了servlet與url、絕對路徑的關(guān)系等。每個應(yīng)用就是一個Context;
Wrapper是對Servlet原生對象的包裝,Wrapper便于對LifeCycle生命周期進(jìn)行管理
四、lifecycle接口與生命周期
上面已經(jīng)講到,Tomcat中幾乎所有的接口都實(shí)現(xiàn)了LifeCycle接口,這也使得,整個tomcat的啟動和關(guān)閉過程中,可以直接
通過責(zé)任鏈設(shè)計(jì)模式Lifecycle接口實(shí)現(xiàn)對所有對象的生命周期管理。同時可以在各個子接口中實(shí)現(xiàn)自己的功能呢。
例如在server 的Start過程中可以解析默認(rèn)的server.xml文件,而container的start過程中會解析web.xml等。
在stop的時候,container又可以處理服務(wù)器緩存的session。將他們持久化 到磁盤上。