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

Spring MVC @Controller 掃描失效排查:缺少 mvc:annotation-driven 導致 404 的根因與修復

     編輯:Java 綜合教學

問題現象

  • 專案啟動無報錯,控制台顯示 Spring 容器正常初始化。
  • 瀏覽器訪問 `@RequestMapping` 路徑返回 **404**,Controller 方法完全未被調用。
  • 靜態資源 (CSS/JS/圖片) 正常訪問。

錯誤配置對比

❌ 失效配置

<!-- 僅掃描 Controller 註解 -->
<context:component-scan base-package="com.cjw.test.controller" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!-- 缺少這行! -->
<!-- <mvc:annotation-driven/> -->

<mvc:default-servlet-handler/>

✅ 修正配置

<context:component-scan base-package="com.cjw.test.controller" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!-- 關鍵:啟用 @RequestMapping、@RequestBody、@ResponseBody 等註解處理器 -->
<mvc:annotation-driven/>

<mvc:default-servlet-handler/>

根因深度解析

組件作用缺失後果
context:component-scan將 `@Controller` 類實例化為 Bean,註冊到 IOC 容器Bean 不存在,自然無法映射
mvc:annotation-driven註冊 RequestMappingHandlerMapping、RequestMappingHandlerAdapter、ExceptionHandlerExceptionResolver 等核心 MVC 基礎設施**雖然 Bean 存在,但無 HandlerMapping 識別 @RequestMapping,DispatcherServlet 找不到處理器,拋給 DefaultServletHttpRequestHandler → 404**
mvc:default-servlet-handler讓容器默認 Servlet 處理靜態資源、無映射路徑靜態資源 404

關鍵認知:`component-scan` 只負責「造 Bean」,`mvc:annotation-driven` 負責「讓 Bean 能被 MVC 機制識別並調用」。**二者缺一不可**。

驗證步驟

  1. 啟動專案,觀察日誌是否出現 `Mapped "{[/path],methods=[GET]}"` 字樣。
  2. 若無,檢查 `mvc:annotation-driven` 是否缺失或拼寫錯誤。
  3. 補全後重啟,再次確認映射日誌與頁面跳轉。

web.xml 參考(/ 路徑映射)

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

總結

Spring MVC 404 且無報錯,**首查 `` 是否缺失**。記住:「掃描註冊 Bean ≠ 啟用 MVC 註解處理」,雙劍合璧才能正常路由。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved