Tomcat 為 Java Servlet 容器,**必須先安裝 JDK** (非 JRE),且版本對應:
| Tomcat 版本 | 最低 JDK 版本 | 建議 JDK 版本 |
|---|---|---|
| Tomcat 7.0 | JDK 6 | JDK 8 (LTS) |
| Tomcat 8.0 / 8.5 | JDK 7 | JDK 8 / 11 (LTS) |
| Tomcat 9.0 | JDK 8 | JDK 11 / 17 (LTS) |
| Tomcat 10.1 | JDK 11 | JDK 17 / 21 (LTS) |
<role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="admin" password="StrongP@ssw0rd!" roles="manager-gui,admin-gui"/>
| 檔案 | 用途 | 常改項目 |
|---|---|---|
| server.xml | 核心伺服器設定 | Port (8080→80), Host, Context, Connector (SSL, AJP, maxThreads, compression) |
| web.xml | 全域 Web 應用設定 | 預設 Servlet、Session timeout、MIME mapping、JSP 編譯參數 |
| context.xml | 全域 Context 設定 | Resource (DataSource)、Valve、Manager (Session 持久化) |
| tomcat-users.xml | 內建認證帳號 | Manager/Admin 角色帳號 |
| logging.properties | 日誌設定 | 級別、輪轉、輸出目標 |
| catalina.bat / setenv.bat | JVM 參數 | -Xms, -Xmx, -XX:MetaspaceSize, GC 策略, -Dfile.encoding=UTF-8 |
@echo off set CATALINA_OPTS=-server ^ -Xms2g -Xmx2g ^ -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m ^ -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ^ -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 ^ -Duser.timezone=Asia/Taipei ^ -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%CATALINA_BASE%\logs\heapdump.hprof
Linux/Mac 用 `setenv.sh` (加執行權限)。
| 現象 | 原因 | 解決 |
|---|---|---|
| 啟動閃退 / 8080 無回應 | JAVA_HOME 錯誤 / Port 衝突 / JVM 參數錯誤 | 檢查 JAVA_HOME、netstat -ano | findstr :8080、catalina.bat run 看前景錯誤 |
| Manager 403 Access Denied | tomcat-users.xml 未配置 manager-gui / IP 限制 | 加入 manager-gui 角色、conf/Catalina/localhost/manager.xml 移除 RemoteAddrValve |
| 中文亂碼 | URI 編碼 / DB 連線編碼 / JSP 編譯編碼 | Connector URIEncoding="UTF-8", DB URL useUnicode=true&characterEncoding=UTF-8, web.xml JSP config |
| 記憶體洩漏 / OOM | Heap 太小 / Metaspace 滿 / 類別洩漏 | 調大 Xmx/Metaspace、啟用 HeapDump 分析 (MAT/JVisualVM) |
Tomcat 部署核心三步:**正確 JDK → 解壓/安裝 Tomcat → 設定 JAVA_HOME/CATALINA_HOME + 管理員帳號**。生產環境務必調整 JVM 參數、啟用 G1GC、配置連線池與監控。Windows 建議使用 **免安裝版 + 手動建立服務 (procrun)** 或 **exe 安裝版**,Linux/容器化部署請參考官方 Docker Image。