歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring MVC 自動掃描注解失效原因

Spring MVC 自動掃描注解失效原因

日期:2017/3/1 9:14:10   编辑:Linux編程

關於spring自動掃描,在控制層,采用注解配置@Controller,項目能夠成功啟動,且無任何報錯。但是 在進行頁面跳轉時,並未進行相應的攔截,整個界面只能在默認界面 ,跳轉報404,由於樓主初次嘗試,在繞了一個大圈後,初步確認是在掃描時mvc控制器,並未成功,詳情請看代碼

   <!-- 開啟controller注解支持 -->
    <context:component-scan base-package="com.cjw.test.controller" use-default-filters="false">

    </context:component-scan>
<!--使控制器注解生效-->
<mvc:annotation-driven/>
<!-- 容器默認的DefaultServletHandler處理 所有靜態內容與無RequestMapping處理的URL-->
<mvc:default-servlet-handler/>

但是在進行頁面跳轉時,始終報404,因為在控制器掃描時未將控制層與其余注解區別,修改後代碼如下:

    <!-- 開啟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:annotation-driven/>,那麼所有的Controller可能就沒有解析,所有當有請求時候都沒有匹配的處理請求類,就都去<mvc:default-servlet-handler/>即default servlet處理了。添加上<mvc:annotation-driven/>後,相應的請求被Controller處理,而靜態資源因為沒有相應的Controller就會被default servlet處理。總之沒有相應的Controller就會被default servlet處理就ok了。

web.xml配置如下,采用靜態頁面跳轉:

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

Spring MVC+Spring3+Hibernate4開發環境搭建 http://www.linuxidc.com/Linux/2013-07/87119.htm

Spring MVC整合Freemarker基於注解方式 http://www.linuxidc.com/Linux/2013-02/79660.htm

基於注解的Spring MVC簡單介紹 http://www.linuxidc.com/Linux/2012-02/54896.htm

Spring MVC 框架搭建及詳解 http://www.linuxidc.com/Linux/2012-01/52740.htm

Spring MVC使用Cron表達式的定時器 http://www.linuxidc.com/Linux/2014-12/110733.htm

簡單的Spring MVC經典案例 http://www.linuxidc.com/Linux/2016-04/129718.htm

Copyright © Linux教程網 All Rights Reserved