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