配置 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 的請求也被攔截,導致視圖解析鏈路斷裂。/。<mvc:resources/> 或容器默認處理。/api/* 等具體前綴,避免污染靜態資源。