1. 程式人生 > >springmvc中找不到頁面,進入不到方法,並且不報錯

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,或者自己想要的註解,這種我自己還沒有接觸過,所以也只是一個大概的理解。

參考概念:

https://www.jianshu.c