天天看點

springmvc對靜态資源通路處理1、url-pattern為/2、url-pattern為/*

1、url-pattern為/

在web.xml配置前端控制器的url-pattern為/時,動态資源和配置的控制器可以通路,但html,gif圖檔,css,js等靜态資源不可以通路了。

1.1 原因

其實在每個動态web項目下都會有個局部web.xml配置檔案,tomcat下有個全局web.xml配置檔案,當使用tomcat啟動動态web項目時,當url-pattern為/在局部的web.xml配置,預設全局web.xml已經配置了url-pattern為/,全局web.xml的url-pattern為/,可以通路靜态資源、動态資源、控制器。此時,tomcat會就近原則,選擇該動态web項目的局部web.xml,進而隻能通路jsp動态資源和配置的控制器,不能通路靜态資源。

1.2 解決方案

第一種:springmvc.xml配置放行靜态資源

mvc:default-servlet-handler是把靜态資源還給全局配置web.xml的預設servlet處理。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<!-- 元件包掃描 -->
	<context:component-scan base-package="cn.zj.springmvc"/>
	
	
	<!-- 設定SpringMVC的注解驅動 -->
	<mvc:annotation-driven/>
	
	
	<!-- 設定SpringMVC靜态資源處理 -->
	<mvc:default-servlet-handler/>

</beans>

           

第二種:web.xml配置*.do等通配符

此時springmvc不需要配置放行靜态資源mvc:default-servlet-handler标簽,在web.xml配置url-pattern為*.do。當靜态資源進來,不符合*.do,則走全局的web.xml,而全局的web.xml又放行靜态資源,進而靜态資源可以通路到。

注意:控制器通路時,需要加上.do,但@RequestMapping("/url"),url不需要添加.do。springmvc預設會給url添加.do。是以可以添,可不添。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">

	<!-- 內建配置SpringMVC -->


	<!-- 配置SpringMVC的前端控制器(總控) 讓浏覽器的所有請求都經過SpringMVC架構 -->
	<servlet>
		<servlet-name>MVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 配置讀取配置檔案的初始化參數 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<!-- 初始化容器建立所有對象 -->
		<load-on-startup>1</load-on-startup>
		
	</servlet>
	<servlet-mapping>
		<servlet-name>MVC</servlet-name>
		<!-- <url-pattern>/</url-pattern> -->
		
		<!-- 實際開發一般都喜歡通配符 * 加上字尾
			*.do , *.action (早期Struts2的風格)
		 -->
		<url-pattern>*.do</url-pattern>
		
	</servlet-mapping>
</web-app>
           

2、url-pattern為/*

在web.xml配置前端控制器的url-pattern為/*時,配置的控制器也不可以通路,html,gif圖檔,css,js等靜态資源和動态資源(jsp)都不可以通路了。

繼續閱讀