Spring MVC配置DispatcherServlet前端控制器和攔截器(對靜態資源不攔截)的方法

自己在做作業的時候碰到在jsp裏導圖片無法正常顯示的情況,後來發現是自定義的interceptor對圖片進行了攔截,所以無法獲取到圖片

.xml文件裏的代碼

  web.xml裏的部分配置信息(配置DispatcherServlet):

<!-- 配置Spring MVC前端核心控制器 -->
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc-config.xml</param-value>
		</init-param>
		<!-- 配置服務器啓動後立即加載Spring MVC配置文件 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

  springmvc-config.xml裏的部分配置信息(配置靜態資源的訪問映射即不攔截靜態資源):

 <!-- 配置靜態資源的訪問映射,此配置中的文件,將不被DispatcherServlet前端控制器攔截 -->
	  <mvc:resources location="/js/" mapping="/js/**" ></mvc:resources>
	  <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
	  <mvc:resources location="/fonts/" mapping="/fonts/**"></mvc:resources>
	  <mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
 <!-- 配置登錄校驗攔截器 -->
	  <mvc:interceptors>
	  	<mvc:interceptor>
	  		<mvc:mapping path="/**"/>
	  		<bean class="com.edu.bdu.interceptor.LoginInterceptor"></bean>
	  	</mvc:interceptor>
	  </mvc:interceptors>

        原來經常這樣配置,所以覺得靜態資源都放行了,但是經過多次實驗還是被攔截了,所以我懷疑是攔截器給攔掉了,對攔截器配置進行修改

第一種方法:在攔截器裏配置不需要攔截的資源路徑(我的是圖片)

<!-- 配置登錄校驗攔截器 -->
	  <mvc:interceptors>
	  	<mvc:interceptor>
	  		<mvc:mapping path="/**"/>
	  		<!-- 增加的信息 /start -->
	  		<mvc:exclude-mapping path="/**/*.png"/>
	        <mvc:exclude-mapping path="/**/*.gif"/>
	        <mvc:exclude-mapping path="/**/*.jpg"/>
	        <!-- 增加的信息 /end -->
	  		<bean class="com.edu.bdu.interceptor.LoginInterceptor"></bean>
	  	</mvc:interceptor>
	  </mvc:interceptors>

第二種方法:在web.xml中配置默認攔截器,不攔截靜態資源

  用這種方法的話需要在web.xml裏添加servlet-mapping

	<!-- 不對靜態文件攔截 -->  
	<servlet-mapping>  
	    <servlet-name>default</servlet-name>  
	    <url-pattern>/js/*</url-pattern>  
	    <url-pattern>/css/*</url-pattern>   
	    <url-pattern>/fonts/*</url-pattern>  
	    <url-pattern>/images/*</url-pattern> 
	</servlet-mapping>

  springmvc-config.xml裏添加<mvc:default-servlet-handler />(我用的tomcat默認servlet名字是default)

<mvc:default-servlet-handler default-servlet-name="default"/>

  用這種方法配置那麼<mvc:resources>也就不要了,攔截器裏也不用寫<mvc:exclude-mapping>了

第三種方法:在web.xml中配置特定的<url-pattern>

<!-- 配置Spring MVC前端核心控制器 -->
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc-config.xml</param-value>
		</init-param>
		<!-- 配置服務器啓動後立即加載Spring MVC配置文件 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>

  用這種方法,spring攔截的時候只攔截 “.action” 結尾的請求,就無關於靜態資源的維護了。
<mvc:resources>也就不要了,攔截器裏也不用寫<mvc:exclude-mapping>了

當DispatcherServlet請求映射配置爲"/"時,Spring MVC將捕獲Web容器所有的請求,包括靜態資源的請求,Spring MVC會將它們當成一個普通請求處理,導致找不到對應處理器造成錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章