1. 程式人生 > >Tomcat整體介紹

Tomcat整體介紹

來源

本文整理自 <Tomcat核心設計剖析>、<Tomcat結構解析>

Tomcat 整體架構

​ 如上圖所示:包含了Tomcat內部的主要元件,每個元件之間的層次包含關係很清楚。Tomcat大體上可以看成由 Connector 和 Container 元件組成。Connector元件負責在伺服器端處理客戶端連線(客戶端連線、接收客戶端訊息報文、訊息報文的解析等),Container負責對客戶端的請求進行邏輯處理,並把結果返回給客戶端。

對應的server.xml中節點

<Server>
<Listener/>
<GlobalNamingResources>
<Resource/>
</GlobalNamingResources>
<Service>
<Executor/>
<Connector/>
<Engine>
<Cluster/>
<Realm/>
<Host>
<Context/>
</Host>
</Engine>
</Service>
</Server>

Tomcat內部元件

Server元件

​ Server是最頂級的元件,代表Tomcat的執行例項,一個JVM中只會有一個Server。

  • Listener元件:在Tomcat生命週期中完成不同的工作。
  • GlobalNamingResources元件:整合JNDI

Service元件

​ 是服務的抽象,代表請求從接收到處理的所有的元件的集合。每個Service包含若干個用於接收客戶端的Connector元件和處理請求的Engine元件。還包含了若干個Executor元件,每個都是一個執行緒池。

Connector元件

​ Connector 主要負責接收客戶端連線並接收請求報文、解析報文轉交給 Container容器去處理。為了實現不同的通訊協議,所以有多個 Connector元件,每種協議對應一個Connector元件,目前有 Http協議、AJP協議兩種Connector元件。

​ 在阻塞I/O方式下:Connector的結構如圖:

​ 在非阻塞I/O方式下:Connector的結構如圖:

  • Protocol元件:是協議的抽象,包含接收客戶端連線、接收客戶端訊息報文、報文解析處理、對客戶端的響應等過程,主要包含:
    • Endpoint:內部的 Acceptor 會對埠進行監聽,有請求會丟到 Executor,然後轉交給 Processor元件。
    • Processor: Processor元件對協議進行解析並傳遞到 Engine容器進行處理。
  • Mapper元件:對請求地址進行路由。
  • CoyoteAdaptor元件:一個將Connector 和 Container 聯絡起來的介面卡。

在 BIO和NIO下,使用的元件有所不同,並且NIO多了一個 Poller元件(輪詢多個客戶端連線,不斷檢測,處理各種事件。)

Engine元件

​ Engine 代表全域性Servlet引擎,每一個 Service 只能包含一個 Engine容器元件,但是Engine元件 可以包含很多個Host容器元件,還包含如下元件:

  • Listener元件:在Tomcat生命週期中完成某些Engine容器相關工作。
  • AccessLog元件:客戶端的訪問日誌,所有客戶端訪問都會被記錄。
  • Cluster元件:提供叢集功能,可將Engine容器需要共享的資料同步到叢集中的其他Tomcat例項上。
  • Pipeline元件:Engine容器對請求進行處理的管道
  • Realm元件:提供Engine容器級別的使用者--密碼--許可權的資料物件,配合資源認證模組使用。

Host元件

​ Host元件代表虛擬主機,這些虛擬主機可以存放若干Web應用的抽象(Context容器),還有以下元件:

  • Listener元件:在Tomcat生命週期中完成某些Host容器相關工作。
  • AccessLog元件:客戶端的訪問日誌,對該虛擬主機上所有WEB應用的訪問都會被記錄。
  • Cluster元件:提供叢集功能,可將Host容器需要共享的資料同步到叢集中的其他Tomcat例項上。
  • Pipeline元件:Host容器對請求進行處理的管道
  • Realm元件:提供Host容器級別的使用者--密碼--許可權的資料物件,配合資源認證模組使用。

Context元件

​ Context元件是WEB應用的抽象,WEB應用部署到Tomcat後執行會轉成Context物件。

  • Listener元件:在Tomcat生命週期中完成某些Context容器相關工作。
  • AccessLog元件:客戶端的訪問日誌,對該WEB應用的訪問都會被記錄。
  • Pipeline元件:Context容器對請求進行處理的管道
  • Realm元件:提供Context容器級別的使用者--密碼--許可權的資料物件,配合資源認證模組使用。
  • Loader元件:WEB應用載入器,用於載入WEB應用的資源,要保證不同WEB應用之間的資源隔離。
  • Manager元件:會話管理器,用於管理對應WEB容器的會話,包括維護會話的生成、更新、銷燬。
  • NamingResource元件:命名資源,負責將Tomcat配置檔案的Server.xml和Web應用的context.xml資源和屬性對映到記憶體中。
  • Mapper元件:Servlet對映器,屬於Context內部的路由對映器,只負責該Context容器的路由。
  • Wrapper元件:Context的子容器。

Wrapper元件

​ 一個Wrapper對應一個 Servlet,包含以下元件:

  • Servlet元件:
  • ServletPool元件:當WEB應用實現了 SingleThreadModel 介面時,會在Wrapper中產生一個Servlet物件池。執行緒執行,先從物件池中獲取一個Servlet物件,能保證執行緒安全。
  • Pipeline元件:Wrapper容器對請求進行處理的管道。