一、Tomcat server 基本結(jié)構(gòu)

Tomcat最重要的兩個組件是Connector(連接器)和Container(容器)。其中Connector是可以被替換的,這樣可以提供給服務(wù)器設(shè)計者更多的選擇。多個Connector與一個Container封裝在一起(最主要的兩個組成部分),就組成了一個Service。
1、Connector(連接器)
? ? ?Connector在指定的端口監(jiān)聽客戶端的請求,并將從Socket連接接受到的請求封裝成Request發(fā)送給Engine處理,并將處理后的結(jié)果封裝為Response返回給客戶端。
? ? ?Connector使用ProtocolHandler來處理請求,不同的ProtocolHandler代表不同的連接類型。例如:Http1.1Protocol使用的是Socket連接。ProtocolHandler包含三個組成部分:Endpoint、Processor、Adapter。
1.1、Endpoint
? ? ?實現(xiàn)類TCP/IP協(xié)議,處理底層的Socket網(wǎng)絡(luò)連接。
? ? ?Endpoint的抽象實現(xiàn)AbstractEndpoint里面定義的Acceptor和AsyncTimeout兩個內(nèi)部類和一個Handler接口。Acceptor用于監(jiān)聽請求,AsyncTimeout用于檢查異步Request的超時,Handler用于處理接收到的Socket,在內(nèi)部調(diào)用Processor進(jìn)行處理。
1.2、Processor
? ? ?Processor實現(xiàn)了Http協(xié)議,在這將Endpoint接受到的Socket連接封裝成Request。
1.3、Adapter
? ? ?Adapter將封裝好的Request轉(zhuǎn)交給Engine做具體處理。
2、Container(容器)
? ? ?Container是一個接口,定義了下屬的各種容器。
2.1、Engine
? ? ?負(fù)責(zé)處理來自所屬service的全部請求,并經(jīng)處理后的結(jié)果返回給service。每個Engine下可以配置多個虛擬主機(Host),用來匹配不同的請求。同時設(shè)有一個默認(rèn)的Host,用來處理未能匹配到的請求。
2.2、Host
? ? ?每個Host代表一個虛擬主機,并匹配不同的域名。Host將匹配到的請求交給相應(yīng)的context來處理。這里的每個context代表一個Web應(yīng)用,一個Host可以包含多個Context。

2.3、Context
? ? ?一個Context對應(yīng)一個應(yīng)用,也即應(yīng)用上下文,保存了應(yīng)用運行期間所需的數(shù)據(jù)結(jié)構(gòu)與中間變量。每個Context中包含多個Wrapper。
2.4、Wrapper
? ? ?每個Wrapper代表一個servlet,它負(fù)責(zé)管理servlet的裝載、初始化、執(zhí)行、資源回收。
二、Lifecycle
? ? ?用于管理組件的生命周期相,如:(init、start、stop、destroy)等操作。
1、LifecycleListener
? ? ?用于監(jiān)聽組件生命周期相關(guān)的事件。
2、LifecycleEvent
? ? ?當(dāng)有生命周期時間發(fā)生時,用于事件的時間、類型和數(shù)據(jù)等信息。
三、Tomcat的啟動過程
詳情請見下一篇