《How Tomcat Works》讀書筆記:Tomcat 核心組件與容器升級架構
本文梳理 Tomcat 早期架構核心類職責及容器層級升級演進,幫助理解 Servlet 容器核心設計。
核心啟動與連接處理類
- Bootstrap:服務器啟動入口,負責初始化類加載器、啟動 Catalina
- HttpConnector:連接器組件,創建 ServerSocket 監聽 HTTP 請求,將 Socket 轉換為 Request/Response 對象
- HttpProcessor:請求處理器,解析 HTTP 請求行、頭、體。關鍵設計:不解析查詢字符串與請求體參數,交由 Servlet 開發者通過 Request API 按需解析,提升性能。
容器升級架構演進
Tomcat 容器採用層級架構,每層負責不同範圍的請求處理:
- Engine:頂層容器,管理多個 Host,處理所有請求
- Host:虛擬主機,管理多個 Context(Web 應用)
- Context:Web 應用上下文,管理 Servlet、Filter、Listener 等
- Wrapper:最底層,封裝單個 Servlet 實例
請求流向:Connector → Engine → Host → Context → Wrapper → Servlet
每層容器實現 Pipeline-Valve 鏈,Valve 負責具體處理邏輯(如訪問日誌、單點登錄),支持動態攔截鏈。
架構圖解
關鍵設計啟示
- 職責分離:Connector 只管網絡 I/O,Container 管 Servlet 生命周期
- 組合模式:Container 統一接口,Engine/Host/Context/Wrapper 遞歸組合
- 責任鏈:Valve 鏈實現橫切關注點(日誌、安全、壓縮)
- 延遲解析:HttpProcessor 不預解析參數,按需解析減少無用開銷
理解早期架構有助於掌握現代 Tomcat(NIO/NIO2、非阻塞、虛擬線程)的演進脈絡。