Web 容器(Web Container)是 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 容器運用了大量設計模式(Design Patterns)與高並行技術,是學習系統設計的絕佳素材
- 提升問題排查能力 — 理解容器的工作原理,才能快速定位並解決生產環境中的問題
- 建立完整知識體系 — 從 HTTP 協定到 Servlet 規範,從 I/O 模型到執行緒池,形成系統性的認知
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 進行責任鏈(Chain of Responsibility)處理
- Filter 鏈 呼叫 Servlet