一、Tomcat的整體架構
- 一個Tomcat只有一個server,server服務器有多個service。
- service 由多個connector 和一個container 組成。
- connector 是請求接收器,負責接收請求和把socket轉化爲request及response轉化。
二、connector是如何處理請求的?
-
不同協議的請求有不同的ProtocolHandler處理,ProtocolHandler由endpoint,processor,Adapter 組成。
-
Endpoint 接收請求,處理底層的socket網絡請求,交由Hander接口處理。
-
Handler 調用Processor將socket請求封裝成request,.
-
最後由Adapter 適配對應的Servlet容器進行處理請求。
-
AsyncTimeout 處理異步超時的請求。
-
Container 負責具體的請求處理和返回請求結果。
三、Container 架構分析:
- 架構圖:
- engine: engine 表示管理器,管理多個站點,一個service只有一個engine。
- Host: 站點,虛擬主機。可以配置多個。
- Context: 代表tomcat下運行的一套程序,比如 doc,Root.Root 默認是主應用程序。即訪問時默認的訪問。
- Wrapper: 封裝Servlet。
- 那麼container是如何通過這四個容器進行處理請求的呢?
- 責任鏈模式:Pipeline-Value 管道的責任鏈模式。
-
每個Pipeline都有一個基礎的Value,而且是在管道的最後一個執行,這個Value叫做BaseValue,BaseValue是不可刪除的;
在上層容器的管道的BaseValue中會調用下層容器的管道。
-
那麼請求就是一層層的從上到下進行處理,每層只處理自己處理的事情。
-
處理完成後就可以返回response給Connector,由Connector返回給客戶端。
參考:https://zhuanlan.zhihu.com/p/35398064