首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Tomcat 核心架構與請求處理流程全解析

     編輯:Java 綜合教學

Tomcat 核心架構與請求處理流程全解析

Tomcat 是最流行的 Servlet 容器,理解其組件層級與請求流轉路徑,有助於排查部署問題、優化效能、編寫自定義 Valve/Filter。本文基於 server.xml 結構,詳細解析 Server、Service、Connector、Engine、Host、Context 六大核心組件及 HTTP 請求處理全鏈路。

一、核心組件層級關係

Server (單例)
 └─ Service (可多個)
      ├─ Connector (可多個,如 HTTP/1.1、AJP)
      └─ Engine (單個)
           └─ Host (虛擬主機,可多個)
                └─ Context (Web 應用,可多個)
                     └─ Servlet (多個)

1. Server

代表整個 Catalina 容器,單例。包含一個或多個 Service,監聽 shutdown 命令端口(預設 8005)。

2. Service

將一組 Connector 與一個 Engine 綁定。Connector 接收請求,Engine 處理請求。一個 Service 內所有 Connector 共享同一 Engine。

3. Connector

監聽特定端口,處理特定協議:

  • HTTP/1.1 Connector:預設 8080,直連瀏覽器。
  • AJP Connector:預設 8009,對接 Apache httpd / Nginx 反向代理。

核心屬性:port、protocol、redirectPort(HTTPS 重定向)、maxThreads、connectionTimeout。

4. Engine

請求處理核心管道,包含多個 Host。屬性:defaultHost(未匹配 Host 時的兜底)。

5. Host

虛擬主機,對應一個網域名。屬性:name、appBase(Webapps 目錄)、unpackWARs、autoDeploy。可配置 Alias 綁定多域名。

6. Context

對應一個 Web 應用(WAR 包或解壓目錄)。路徑由 path 指定("" 為根應用)。核心:
① 載入 $CATALINA_HOME/conf/web.xml(全局)與 WEB-INF/web.xml(應用級)定義的 Servlet。
② 建立映射表 URL Pattern → Servlet。
③ 請求到達時,按「最長匹配」原則查找 Servlet 執行。

二、HTTP 請求處理全流程

以請求 https://localhost:8080/wsota/wsota_index.jsp 為例:

  1. Connector(HTTP/1.1,8080)接收 TCP 連線,解析 HTTP 請求,封裝為 Request/Response 物件。
  2. Engine 接收請求,根據 Host header(Host: localhost)匹配 Host(name="localhost")。
  3. Host 根據請求路徑 /wsota/wsota_index.jsp 匹配 Context(path="/wsota",最長匹配)。
  4. Context 在映射表中查找 /wsota_index.jsp 對應的 Servlet(JSP 編譯產生的 Servlet 或 DefaultServlet)。
  5. 目標 Servlet 執行 service(req, resp),生成響應內容。
  6. 響應沿原路返回:Context → Host → Engine → Connector → 寫回 Socket → 瀏覽器。

三、關鍵配置文件

server.xml

定義 Server/Service/Connector/Engine/Host 結構。修改後需重啟生效。

web.xml(全局與應用級)

  • $CATALINA_HOME/conf/web.xml:定義預設 Servlet(DefaultServlet、JspServlet)、預設 MIME 映射、Session 配置等。所有 Webapp 共享。
  • WEB-INF/web.xml:應用專屬 Servlet/Filter/Listener/錯誤頁面/安全約束等。

四、部署方式

  • server.xml 中 <Context> 元素(不推薦,修改需重啟)。
  • $CATALINA_BASE/conf/[engine]/[host]/ 下放置 xxx.xml(熱部署支援)。
  • 將 WAR/目錄放入 Host.appBase(預設 webapps),autoDeploy=true 時自動部署。

五、效能調優關鍵點

  • Connector:maxThreads(預設 200)、acceptCount、compression、protocol="org.apache.coyote.http11.Http11NioProtocol"(NIO 非阻塞)。
  • Engine/Host:backgroundProcessorDelay 控制周期性任務(Session 清理、熱部署掃描)頻率。
  • Context:reloadable=false(生產環境)、sessionCookiePath、useHttpOnly。

六、總結

Tomcat 以層級組件模型實現 Servlet 規範:Connector 負責通訊,Engine/Host/Context 負責路由與生命週期。熟悉 server.xml 與 web.xml 的分工,能快速定位 404、ClassNotFound、Session 丟失等常見問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved