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 的定位#

特性TomcatJetty
定位全功能 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

延伸閱讀#