Web 容器是 Java Web 開發的基石,它負責處理 HTTP 請求並管理 Servlet 的生命週期。深入理解 Tomcat 和 Jetty 這兩款主流 Web 容器的設計原理,不僅能幫助我們更好地使用它們,還能從中學習到大量優秀的架構設計思想。

為什麼要學習 Web 容器?#

Web 容器 = HTTP 伺服器 + Servlet 容器

Tomcat 和 Jetty 既能處理 HTTP 協定,又能加載和執行 Servlet,是 Java Web 開發不可或缺的基礎設施。

學習 Web 容器的價值:

  1. 理解 Web 開發的本質 - Servlet 技術是 Web 開發的原點,幾乎所有 Java Web 框架(Spring MVC、Spring Boot)都是基於 Servlet 的封裝
  2. 掌握系統設計精髓 - Web 容器運用了大量設計模式和高並行技術,是學習系統設計的絕佳素材
  3. 提升問題排查能力 - 理解容器工作原理,才能快速定位和解決生產環境中的問題
  4. 建立完整知識體系 - 從 HTTP 協定到 Servlet 規範,從 I/O 模型到線程池,形成系統性認知

本模組涵蓋內容#

Web 容器
├── Servlet 基礎
│   ├── HTTP 協定
│   ├── Servlet 規範
│   ├── Filter 與 Listener
│   └── Session 管理
├── Tomcat 架構
│   ├── 連線器設計
│   ├── 容器層級
│   ├── 類載入機制
│   └── 熱部署實現
├── Jetty 架構
│   ├── Handler 機制
│   ├── 嵌入式使用
│   └── 與 Tomcat 對比
└── 容器調校
    ├── 線程池組態
    ├── 連線器調校
    └── JVM 組態

Tomcat 與 Jetty 的定位#

特性TomcatJetty
定位全功能 Servlet 容器輕量級、可嵌入
架構風格多層容器(Engine/Host/Context/Wrapper)Handler 鏈式處理
線程池每個連線器獨立線程池全局共享線程池
適用場景傳統 Web 應用部署嵌入式應用、微服務
Spring Boot 默認可選

學習路徑建議#

建議學習順序

  1. 先掌握 HTTP 協定和 Servlet 規範基礎
  2. 深入學習 Tomcat 架構(更全面、應用更廣)
  3. 對比學習 Jetty(理解不同設計思路)
  4. 最後進行實戰調校

核心知識點預覽#

連線器(Connector)的三大組件#

Endpoint ──> Processor ──> Adapter ──> 容器
   │            │             │
   │            │             └── 轉換為 ServletRequest
   │            └── 解析 HTTP 協定
   └── 處理 TCP 連線

容器的層次結構#

Server
  └── Service
        ├── Connector(多個)
        └── Engine
              └── Host(多個虛擬主機)
                    └── Context(多個 Web 應用)
                          └── Wrapper(多個 Servlet)

請求處理流程#

  1. Acceptor 接收新連線
  2. Poller 檢測 I/O 事件
  3. Executor 執行請求處理
  4. Pipeline-Valve 責任鏈處理
  5. Filter 鏈 呼叫 Servlet

延伸閱讀#