整體架構(gòu)

tomcat的整體架構(gòu)在server.xml配置文件中體現(xiàn)的整體視圖如上。

server組件
Tomcat的一個實例,通常一個JVM只能包含一個Tomcat實例;因此,一臺物理服務(wù)器上可以在啟動多 個JVM的情況下在每一個JVM中啟動一個Tomcat實例,每個實例分屬于一個獨立的管理端口。這是一個頂級組件。
- 提供監(jiān)聽器機制,用于在整個
Tomcat生命周期中對不同的事件進行處理。 - 提供了
Tomcat容器全局的命名資源實現(xiàn)。 - 監(jiān)聽某個端口以接收
SHUTDOWN命令。
Service組件
一個
Service組件通常包含多個用于接收客戶端消息的Connector組件和一個處理請求的Engine組件。不同 的Connector組件使用不同的通信協(xié)議,如HTTP協(xié)議和AJP協(xié)議,此外還包含了若干個Executor組件,每個Executor都是一 個線程池,它可以為Service內(nèi)所有組件提供線程池。
Connector組件
主要的職責(zé)就是接收客戶端連接并接收消息報文,消息報文經(jīng)由它解析后送往
Engine組件處理。因為存在不 同的通信協(xié)議所以我們需要不同的Connector組件,每種協(xié)議對應(yīng)一個Connector組件,目前Tomcat7包含HTTP和AJP兩種協(xié)議的Connector。Connector組件內(nèi)部實現(xiàn)也會根據(jù)網(wǎng)絡(luò)I/O的不同分為阻塞I/O和非阻塞I/O。

Engine組件
Tomcat內(nèi)部有4個級別的容器,分別是Engine、Host、Context、Wrapper。Engine代表全局Servlet引擎,每 個Service組件只能包含一個Engine,但是Engine組件可以包含若干個Host容器組件。除了Host之外還包含如下組件。
-
Listener組件:可以在Tomcat生命周期中完成某些Engine容器相關(guān)工作的監(jiān)聽器。 -
AccessLog組件:客戶端的訪問日志,所有客戶端訪問都會被記錄。 -
Cluster組件:提供集群功能,可以將Engine容器需要共享的數(shù)據(jù)同步到集群中的其他Tomcat實例上,Engine中包含 的Host組件可以共享Cluster。 -
Pipeline組件:Engine容器對請求進行處理的管道。 -
Realm組件:提供了Engine容器級別的用戶-密碼-權(quán)限的數(shù)據(jù)對象,配合資源認(rèn)證模塊使用。
Host組件
Tomcat中Host組件代表虛擬主機,這些虛擬主機可以存放若干Web應(yīng)用的抽象(Context容器)。除了Context之外 還包含如下組件。
-
Listener組件:可以在Tomcat生命周期中完成某些Engine容器相關(guān)工作的監(jiān)聽器。 -
AccessLog組件:客戶端的訪問日志,所有客戶端訪問都會被記錄。 -
Cluster組件:提供集群功能,可以將Host容器需要共享的數(shù)據(jù)同步到集群中的其他Tomcat實例上。 -
Pipeline組件:Host容器對請求進行處理的管道。 -
Realm組件:提供了Host容器級別的用戶-密碼-權(quán)限的數(shù)據(jù)對象,配合資源認(rèn)證模塊使用。
Context組件
Context組件是Web應(yīng)用的抽象,我們發(fā)開的Web應(yīng)用部署到Tomcat后運行時就會轉(zhuǎn)化成Context對象。它包 含了各種靜態(tài)資源、若干Servlet(Wrapper容器)以及各種其他動態(tài)資源。它主要包括如下組件。
-
Listener組件:可以在Tomcat生命周期中完成某些Context容器相關(guān)工作的監(jiān)聽器。 -
AccessLog組件:客戶端的訪問日志,所有客戶端訪問都會被記錄。 -
Pipeline組件:Context容器對請求進行處理的管道。 -
Realm組件:提供了Context容器級別的用戶-密碼-權(quán)限的數(shù)據(jù)對象,配合資源認(rèn)證模塊使用。 -
Loader組件:Web應(yīng)用加載器,用于加載Web應(yīng)用的資源,它要保證不同Web應(yīng)用之間的資源隔離。 -
Manager組件:會話管理器,用于管理Web容器的會話,包括維護會話的生成、更新、銷毀。 -
NamingResource組件:命名資源,它負(fù)責(zé)將server.xml和web應(yīng)用的context.xml資源映射到內(nèi)存中。 -
Mapper組件:servlet映射器,它屬于context內(nèi)部的路由映射器,負(fù)責(zé)context容器的路由導(dǎo)航。 -
Wrapper組件:Context子容器。
Wrapper組件
是
Tomcat4個級別的容器中最小的,與之相對應(yīng)的是Servlet,一個Wrapper對應(yīng)一個Servlet。它主要包括如 下組件。
-
Servlet組件:Servlet即Web應(yīng)用開發(fā)中常用的Servlet,我們會在Servlet中編寫好請求的邏輯處理。 -
ServletPool組件:Servlet對象池,當(dāng)Web應(yīng)用的Servlet實現(xiàn)了。SingleThreadModel接口時則會在Wrapper中產(chǎn)生 一個Servlet對象池。線程執(zhí)行時,需先從對象池中獲取一個Servlet對象,ServletPool組件能保證Servlet對象的線程 安全。 -
Pipeline組件:Wrapper容器對請求進行處理的管道。