核心概念
| 配置項 | 位置 | 作用 |
| Context Path (context path) | `server.xml` → `` 或 Eclipse 伺服器編輯器 → Modules → Path | Web 應用在該 Tomcat Host 下的**虛擬路徑前綴**,訪問 URL 為 `https://host:port/xxx/...` |
| Doc Base (docBase) | `server.xml` → `` 或 Modules → Document Base | Web 應用**實際檔案系統路徑**(WAR 展開目錄或源碼 WebContent 目錄)。 |
| Web Project Settings | Eclipse 專案屬性 → Web Project Settings → Context root | Eclipse 內部構建/部署時使用的**上下文根**,決定生成的 WAR 包名、部署路徑、預設 Context Path。 |
三者關係圖解
專案源碼 (WebContent)
│
▼ Eclipse 建構 (WAR)
目標目錄 / wtpwebapps / [Context Root] / ← docBase 指向這裡
│
▼ Tomcat 部署 (server.xml Context)
Host: localhost
Context path="/myapp" docBase="wtpwebapps/myapp"
│
▼ 瀏覽器訪問
https://localhost:8080/myapp/index.jsp
常見配置組合與效果
| server.xml Context path | Web Project Settings Context Root | 訪問 URL | 說明 |
| `/myapp` | `myapp` | `https://host:port/myapp/...` | 標準配置,兩者一致。 |
| `/` | `myapp` | `https://host:port/...` (根路徑) | **覆蓋 Tomcat 預設 ROOT 應用**。`path="/"` 表示「默認 Web 應用」,處理所有不匹配其他 Context 的請求。常用於生產環境主站點。 |
| `/api` | `myapp` | `https://host:port/api/...` | Context Path 可與專案名不同,支援多專案映射到不同虛擬路徑。 |
| 無 Context (僅 docBase) | `myapp` | 無法直接訪問 (除非配置默認 Host) | 需在 `server.xml` 明確配置 ``。 |
為什麼 `path="/"` 且 Web Project Settings 也為 `/` 時能正常訪問?
- Eclipse 將專案部署為 `wtpwebapps/ROOT`(Context Root 為 `/` 時特殊處理)。
- Tomcat `server.xml` 中 ``(或 `path="/"`)使其成為**默認 Web 應用**。
- 瀏覽器訪問 `https://host:port/` 直接命中該應用,無需專案名路徑。
最佳實務建議
- **開發環境**:Eclipse 伺服器編輯器 → Modules 視覺化配置,避免手改 `server.xml` 出錯。
- **Context Root 命名**:使用小寫、無特殊字元、語義清晰(如 `order-service`、`user-web`)。
- **生產環境**:打包 WAR,`docBase` 指向 WAR 檔或展開目錄,`path` 按反向代理/網關路由規劃。
- **避免衝突**:同一 Host 下 Context Path 必須唯一;若需多版本並存,用不同 Host 或路徑前綴區分。
- **ROOT 應用謹慎用**:`path="/"` 會接管所有未匹配請求,確保只有一個 ROOT 應用,否則啟動報錯。
總結
Context Path = 訪問 URL 路徑前綴,Doc Base = 實體檔案位置,Web Project Settings = Eclipse 內部構建參考。三者在 Eclipse 部署流程中層層映射,理解映射鏈路能快速定位「為什麼 404」「為什麼路徑多了一層」等常見部署問題。