pring mvc - 對靜態資源的處理
spring對靜態資源文件(js css htm html jpg jepg png bmp)等的處理方式如下:
一、交由上級web容器處理,在web.xml中的org.springframework.web.servlet.DispatcherServlet 配置之前加入如下代碼:
1
2
3
4
|
<servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> |
根據不同的資源文件制定不同的映射機制,其中servlet-name在tomcat中默認是default,該servlet在tomcat\config\web.xml文件中默認配置,不同的應用服務器對應的靜態資源文件處理的servlet名稱不盡相同,如下:
1
2
3
4
5
|
tomcat,jboss,glassfish,jetty : defaut; weblogic : FileServlet; websphere : SimpleFileServlet; resin : resin-file; GAE : _ah_default |
過濾器配置多個url-pattern
過濾器配置多個url-pattern
<filter-mapping>
<filter-name>MohrssFilter</filter-name>
<url-pattern>/nav.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MohrssFilter</filter-name>
<url-pattern>/sys/home/sys_home_main/sysHomeSearch_script.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MohrssFilter</filter-name>
<url-pattern>/hrt/mohrss/student/tree1.jsp</url-pattern>
</filter-mapping>
二、交由spring mvc:resources 處理
在dispatchServlet.xml文件中增加
<mvc:resources location="/WEB-INF/resource/" mapping="/resource/**"/>
該方式雖然靜態資源文件可以訪問了,但是如果系統配置了通配符的攔截器,靜態資源還是會被攔截器攔截,如下:
1
2
3
4
5
6
|
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path= "/*" /> <bean class = "com.xinlong.cms.front.interceptor.CmsFrontInterceptor" ></bean> </mvc:interceptor> </mvc:interceptors> |
因此需要修改,如下:
1
2
3
4
5
6
7
|
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path= "/*" /> <mvc:exclude-mapping path= "/resource/**" /> <bean class = "com.xinlong.cms.front.interceptor.CmsFrontInterceptor" ></bean> </mvc:interceptor> </mvc:interceptors> |
到此還有個問題mvc:exclude-mapping 標籤不被spring-mvc-3.0.xsd支持,該配置在spring-mvc-3.2.xsd中,可以通過http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd獲取,因此需要在spring-mvc-3.0.xsd文件中增加該標籤,處理辦法很簡單,從網上下載spring-mvc-3.2.xsd,找到標籤後,再找到spring.web.servlet-3.0.5.jar中的spring-mvc-3.0.xsd文件,將標籤加入即可