關于spring自動掃描,在控制層,采用注解配置@Controller,項目能夠成功啟動,且無任何報錯。但是 在進行頁面跳轉時,并未進行相應的攔截,整個界面只能在默認界面 ,跳轉報404,由于樓主初次嘗試,在繞了一個大圈后,初步確認是在掃描時mvc控制器,并未成功,詳情請看代碼
1
2
3
|
<!-- 開啟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,因為在控制器掃描時未將控制層與其余注解區別,修改后代碼如下:
1
2
3
4
5
|
<!-- 開啟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> |
同時,為求將配置項最簡單化,樓主分別剔除相應的配置,觀察其會對 整個功能的啟動或跳轉產生什么影響,在去除
1
|
<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配置如下,采用靜態頁面跳轉:
1
2
3
4
|
<servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> |
以上所述是小編給大家介紹的Spring MVC 注解自動掃描失效原因分析,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://www.cnblogs.com/lianshan/archive/2016/07/13/5666975.html