Web 容器是 Java Web 開發的基石,它負責處理 HTTP 請求並管理 Servlet 的生命週期。深入理解 Tomcat 和 Jetty 這兩款主流 Web 容器的設計原理,不僅能幫助我們更好地使用它們,還能從中學習到大量優秀的架構設計思想。
為什麼要學習 Web 容器?#
Web 容器 = HTTP 伺服器 + Servlet 容器
Tomcat 和 Jetty 既能處理 HTTP 協定,又能加載和執行 Servlet,是 Java Web 開發不可或缺的基礎設施。
學習 Web 容器的價值:
- 理解 Web 開發的本質 - Servlet 技術是 Web 開發的原點,幾乎所有 Java Web 框架(Spring MVC、Spring Boot)都是基於 Servlet 的封裝
- 掌握系統設計精髓 - Web 容器運用了大量設計模式和高並行技術,是學習系統設計的絕佳素材
- 提升問題排查能力 - 理解容器工作原理,才能快速定位和解決生產環境中的問題
- 建立完整知識體系 - 從 HTTP 協定到 Servlet 規範,從 I/O 模型到線程池,形成系統性認知
本模組涵蓋內容#
Web 容器
├── Servlet 基礎
│ ├── HTTP 協定
│ ├── Servlet 規範
│ ├── Filter 與 Listener
│ └── Session 管理
├── Tomcat 架構
│ ├── 連線器設計
│ ├── 容器層級
│ ├── 類載入機制
│ └── 熱部署實現
├── Jetty 架構
│ ├── Handler 機制
│ ├── 嵌入式使用
│ └── 與 Tomcat 對比
└── 容器調校
├── 線程池組態
├── 連線器調校
└── JVM 組態Tomcat 與 Jetty 的定位#
| 特性 | Tomcat | Jetty |
|---|---|---|
| 定位 | 全功能 Servlet 容器 | 輕量級、可嵌入 |
| 架構風格 | 多層容器(Engine/Host/Context/Wrapper) | Handler 鏈式處理 |
| 線程池 | 每個連線器獨立線程池 | 全局共享線程池 |
| 適用場景 | 傳統 Web 應用部署 | 嵌入式應用、微服務 |
| Spring Boot 默認 | 是 | 可選 |
學習路徑建議#
建議學習順序
- 先掌握 HTTP 協定和 Servlet 規範基礎
- 深入學習 Tomcat 架構(更全面、應用更廣)
- 對比學習 Jetty(理解不同設計思路)
- 最後進行實戰調校
核心知識點預覽#
連線器(Connector)的三大組件#
Endpoint ──> Processor ──> Adapter ──> 容器
│ │ │
│ │ └── 轉換為 ServletRequest
│ └── 解析 HTTP 協定
└── 處理 TCP 連線容器的層次結構#
Server
└── Service
├── Connector(多個)
└── Engine
└── Host(多個虛擬主機)
└── Context(多個 Web 應用)
└── Wrapper(多個 Servlet)請求處理流程#
- Acceptor 接收新連線
- Poller 檢測 I/O 事件
- Executor 執行請求處理
- Pipeline-Valve 責任鏈處理
- Filter 鏈 呼叫 Servlet