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

Spring MVC 核心配置陷阱:web.xml 中 url-pattern 的 / 與 /* 區別導致 404 解析

     編輯:Java 綜合教學

問題現場

配置 DispatcherServlet 時,url-pattern 設為 /* 導致:Controller 能進入,但返回視圖解析報 404:

No mapping found for HTTP request with URI [/SpringMvcDemo/WEB-INF/jsp/hello.jsp]
in DispatcherServlet with name 'spring'

根因分析

配置匹配行為後果
/匹配路徑型 URL(如 /hello),不匹配 *.jsp、*.js、*.html 等後綴型默認 Servlet 容器處理靜態資源與 JSP,視圖解析正常
/*匹配所有 URL(含 *.jsp、*.css、*.js 等)DispatcherServlet 攔截轉發給 JSP 的請求,找不到對應 Handler,拋 404

解決方案

將 url-pattern 改為 /:

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

核心原理

  • / 是「默認 Servlet」映射,只攔截未被其他 Servlet 映射匹配的路徑請求,靜態資源、JSP 仍由容器默認 Servlet 處理。
  • /* 是「攔截所有」映射,連容器內部轉發給 JSP 的請求也被攔截,導致視圖解析鏈路斷裂。

最佳實踐建議

  1. Spring MVC 核心 Servlet 用 /。
  2. 靜態資源配置 <mvc:resources/> 或容器默認處理。
  3. 若需 REST 風格 API,考慮 /api/* 等具體前綴,避免污染靜態資源。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved