Tomcat 核心知識體系:架構、版本、部署與調優
Apache Tomcat 是最流輕量級 Servlet 容器,支撐著無數 Java Web 應用。本文系統梳理 Tomcat 的核心概念、目錄結構、版本對應、部署方式、配置優化及 HTTP 協議基礎,幫助開發者建立完整知識圖譜。
1. 什麼是服務器?資源分類
- 服務器本質:管理資源、對外發布資源的程序。
- 靜態資源:HTML、CSS、JS、圖片、視頻等,內容不隨請求變化。
- 動態資源:Servlet、JSP、Action 等服務端程序,運行時動態生成內容。
2. 服務器類型與 Tomcat 定位
| 類型 | 代表 | 特點 |
| 靜態資源服務器 | Apache HTTPD、Nginx | 高併發靜態文件服務,可模塊化支持動態語言 |
| Web 容器(Servlet 容器) | Tomcat、Jetty | 實現 Java EE 部分規範(Servlet、JSP、JDBC、JNDI...),輕量、免費、開源 |
| 應用服務器(Java EE 容器) | WebLogic、JBoss/WildFly、WebSphere | 實現完整 Java EE 標準(EJB、JTA、JMS、JPA...),商業/重量級 |
Tomcat 僅實現 Java EE 子集,屬於 Web 容器,國內使用率極高。
3. Java EE、Servlet/JSP 版本對應表
| Tomcat | Java EE | Servlet | JSP |
| 4.x | J2EE 1.3 | 2.3 | 1.2 |
| 5.x | J2EE 1.4 | 2.4 | 2.0 |
| 6.x | Java EE 5 | 2.5 | 2.1 |
| 7.x | Java EE 6 | 3.0 | 2.2 |
| 8.x | Java EE 7 | 3.1 | 2.3 |
| 9.x | Java EE 8 | 4.0 | 2.3 |
| 10.x | Jakarta EE 9 | 5.0 | 3.0 |
4. 目錄結構詳解
| 目錄 | 作用 | 關鍵文件/說明 |
| bin | 啟動/關閉腳本 | startup.sh/.bat、catalina.sh/.bat、shutdown.sh/.bat |
| conf | 核心配置 | server.xml(端口、Host、Connector)、web.xml、tomcat-users.xml、context.xml |
| lib | 公共類庫 | Tomcat 自身 JAR + Servlet/JSP API 實現類 |
| logs | 日志 | catalina.out、localhost_access_log、manager.log |
| temp | 臨時文件 | 運行時產生,可清理但目錄不可刪除 |
| webapps | 應用部署目錄 | WAR 包或解壓目錄,默認自動部署 |
| work | JSP 編譯產物 | JSP 對應的 Servlet 源碼與 class 文件,修改 JSP 無效果時可清理 |
5. 關鍵配置:server.xml 核心片段
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/myapp" docBase="/opt/apps/myapp"
reloadable="true" />
</Host>
URIEncoding="UTF-8" 解決 GET 參數中文亂碼。
reloadable="true" 開發環境熱部署(生產建議關閉)。
antiResourceLocking="true" 解決 Windows 下 JAR 鎖定無法熱部署問題。
6. 四種部署方式
- webapps 目錄放 WAR/目錄:最簡單,啟動自動展開。
- server.xml Host 內配置 Context:指定
docBase 物理路徑,支持 reloadable、workDir 等屬性。
- conf/Catalina/localhost/<path>.xml:每個應用一個 XML,熱部署友好,推薦生產使用。
- Tomcat Manager / REST API:遠程部署、啟停、重載。
7. 訪問路徑構成
URL = 協議://域名:端口/上下文路徑/資源路徑
URI = /上下文路徑/資源路徑
例:https://localhost:8080/myapp/index.jsp
└─ 協議 └─ 域名:端口 └───── URI ──────┘
8. 用戶與角色配置(tomcat-users.xml)
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="strongPwd" roles="manager-gui,admin-gui"/>
</tomcat-users>
角色對應 Manager 功能:manager-gui(Web 管理)、manager-script(腳本/API)、admin-gui(虛擬主機管理)。
9. HTTP 方法速查
| 方法 | 語義 |
| GET | 獲取資源 |
| POST | 提交/新增資源 |
| PUT | 更新資源(冪等) |
| DELETE | 刪除資源 |
| HEAD | 僅獲取響應頭 |
| OPTIONS | 查詢支持的方法 |
| TRACE | 回環測試 |
10. 常見調優建議
- JVM 參數:
-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m(視機器內存調整)。
- 線程池:
maxThreads 設置為 CPU 核心數 × (1 + 平均等待時間/平均工作時間),通常 200-800。
- 連接器:生產環境建議啟用 NIO2 或 APR(需安裝 native library)。
- 禁用不需要的應用:刪除
webapps/docs、examples、manager、host-manager。
- 安全:修改默認端口、強密碼、限制 Manager 訪問 IP、啟用 HTTPS。