spring mvc 自動掃描註解失效原因
阿新 • • 發佈:2019-01-31
小白試水Spring mvc 在解決了靜態資源載入後遇到了攔截器 跳轉 404的問題
還是網際網路力量大,轉了篇大佬的解決部落格,順利解決,碼。
轉自:
https://www.cnblogs.com/lianshan/p/5666975.html
關於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>