在springmvc配置中,出現了兩次進入不到action方法中,並花費了大部分時間去找問題,因此詳細記錄下相關的配置java
1.配置的位置:spring
applicationContext.xml文件,是必須配置的,也是spring的配置:express
servlet-context.xml文件,是給Tomcat配置的,能夠寫,也能夠不寫,可是若是寫的話就必定要注意,由於問題基本都會出如今這個配置上mvc
兩種寫法:app
項目中,在base-package指定的包中有的子包是不含有註解的,因此這些包能夠不進行掃描,此時能夠指定
<context:exclude-filter>來進行過濾,說明此包不須要被掃描。
Use-dafault-filters=」false」的狀況下:<context:exclude-filter>指定的包不進行相應註解的掃描,
<context:include-filter>指定包或其子包進行相應註解的掃描。框架
不掃描@Controller註解
applicationContext.xml.net
<mvc:annotation-driven /> <context:component-scan base-package="包名"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
servlet-context.xmlcode
<!-- 掃描@Controller註解 -->
<mvc:annotation-driven /> <context:component-scan base-package="包名"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
區別在於一個用的是include,一個用的是exclude,component
spring不只掃描了@Controller修飾的javaod ,還掃描了指定包或其子包下有@Service 、
@Repository註解修飾的java類此時指定的include-filter沒有起到做用,只要把use-default-filter設置成
false就能夠了。這樣就能夠避免在base-packeage配置多個包名。xml
第二種寫法,我的以爲若是是傳統的springmvc,那麼第二種方法出錯的機率會更小一些
<mvc:annotation-driven /> <context:component-scan base-package="包名"> </context:component-scan>
掃描此包下面的全部註解,能夠將controller,service等都注入進去,只須要在applicationContext.xml中配置就能夠了
還有一個疑惑就是:
springmvc的工做流程就是從controller到service,那麼exclude這種配置方法的意義在哪裏?
理解:
有的時候會出現框架混用,或者不須要controller中的註解,須要使用service,或者本身想要的註解,這種我本身尚未接觸過,因此也只是一個大概的理解。
參考概念: