Spring MVC 專案部署至 Tomcat 後,瀏覽器訪問任何路徑 (含靜態 JSP) 均返回 404,且 Tomcat 控制台無錯誤日誌。這通常非程式碼錯誤,而是**部署配置、路徑映射、或建構產物缺失**導致。本文提供系統化排查步驟。
| 錯誤訪問 | 正確訪問 | 原因 |
https://localhost:8080/index.jsp | https://localhost:8080/專案名/index.jsp | 預設 context-path 為專案名 (WAR 檔名) |
https://localhost:8080/專案名/ | https://localhost:8080/專案名/ (同) | 需在 web.xml 或 ServerContext 設定 welcome-file-list |
https://localhost:8080/controllerPath | https://localhost:8080/專案名/controllerPath | 所有請求皆需帶 context-path |
解決 context-path 問題:
在 `server.xml` `` 設為根路徑,或 Maven `pom.xml` 設定 `ROOT` 打包為 `ROOT.war`。
3. web.xml / DispatcherServlet 映射配置
dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
dispatcher
/
index.jsp
常見錯誤:`/*` → 會攔截 JSP/靜態資源導致 404。**必須用 `/`**。
4. 靜態資源與 JSP 視圖解析器配置
若 JSP 直接放在 `webapp/` 根目錄,`prefix` 設為 `/`。但**強烈建議放在 `WEB-INF/views/` 避免直接訪問繞過控制器**。
5. 檢查 Tomcat 日誌 (非控制台輸出)
logs/catalina.yyyy-MM-dd.log:啟動錯誤、類載入失敗。
logs/localhost.yyyy-MM-dd.log:Webapp 部署錯誤、NoSuchMethodError、JAR 衝突。
- 關鍵字搜尋:`SEVERE`、`ERROR`、`ClassNotFoundException`、`BeanCreationException`。
6. Maven 打包檢查
mvn clean package
# 檢查 target/專案名/WEB-INF/lib/ 是否包含 spring-webmvc、spring-context 等核心 JAR
# 檢查 target/專案名/WEB-INF/classes/ 是否包含編譯後 .class 與配置檔
常見問題:`provided` 作用域導致核心 JAR 未打包;資源檔案未納入 `resources` 目錄。
極簡驗證步驟
- 在 `webapp/index.jsp` 撰寫 `
Hello
`。
- 部署後訪問 `https://localhost:8080/專案名/index.jsp`。
→ 能看到 → **靜態資源/JSP 正常,問題在 Controller 映射**。
→ 404 → **Context-path、web.xml、部署結構其中一項錯誤**。
總結
Spring MVC 404 九成源於:**Context-path 未帶**、**`url-pattern` 寫成 `/*`**、**`mvc:default-servlet-handler` 缺失**、**JSP 路徑與 ViewResolver prefix 不符**。按本清單逐項核對,5 分鐘內定位 99% 問題。
- 上一篇文章: Java 企業級開發前端頁面建置流程:從靜態原型到動態整合的標準化實務
- 下一篇文章: SVN 更新後 JSP 報 NullPointerException:衝突解決與專案清理標準流程
Copyright ©
程式碼之家 All Rights Reserved