现在的位置: 首页 > 综合 > 正文

springmvc-处理静态资源

2017年12月27日 ⁄ 综合 ⁄ 共 1498字 ⁄ 字号 评论关闭

博文第7章-链接:http://elf8848.iteye.com/blog/875830

如果你的DispatcherServlet拦截"/*",则会把返回的jsp页面也拦截了(错误配置).
如何你的DispatcherServlet拦截"*.do",这样的有后缀的URL,就不存在访问不到静态资源的问题。
如果你的DispatcherServlet拦截"/",则拦截所有的请求(*.js,*.jpg等静态文件要另外处理)

如果将DispatcherServlet的请求映射配置为“/”,则springmvc会捕获web容器的所有请求,包括静态资源的请求,springmvc会同i将它们当成一个普通的请求进行处理,
也就会出现找不到对应的处理器进而报错。(不能配置为“/*”,不然返回jsp文件的时候会再次被拦截??)

解决方式:
---方式1:配置<mvc:default-servlet-handler />,springmvc会通过DefaultServletHttpRequestHandler进行判断,将静态资源文件(*.jsp)交回web应用服务器默认的Servlet处理。
链接:http://www.noday.net/articles/2011/08/27/1314458236410.html
---方式2:配置<mvc:resources>处理,静态资源由springmvc自己处理。
<mvc:resources mapping="/images/**" location="/images/"/>  
    <mvc:resources mapping="/css/**" location="/css/"/>  
    <mvc:resources mapping="/js/**" location="/js/"/>  
    <mvc:resources mapping="/html/**" location="/html/"/>  
    <mvc:resources mapping="/common/**" location="/common/"/>

 ---方案3:激活Tomcat的defaultServlet来处理静态文件。

要写在DispatcherServlet的前面,让defaultServlet先拦截请求,这样请求就不会进入Spring了。

	<servlet-mapping> 
		<servlet-name>default</servlet-name>
		<url-pattern>*.jpg</url-pattern>   
	</servlet-mapping>  
	<servlet-mapping>     
		<servlet-name>default</servlet-name>  
		<url-pattern>*.js</url-pattern>  
	</servlet-mapping>  
	<servlet-mapping>      
		<servlet-name>default</servlet-name>     
		<url-pattern>*.css</url-pattern>    
	</servlet-mapping>  
	<!--
	Tomcat, Jetty, JBoss, and GlassFish 自带的默认Servlet的名字 -- "default"
	Google App Engine 自带的 默认Servlet的名字 -- "_ah_default"
	Resin 自带的 默认Servlet的名字 -- "resin-file"
	WebLogic 自带的 默认Servlet的名字  -- "FileServlet"
	WebSphere  自带的 默认Servlet的名字 -- "SimpleFileServlet" 
	-->

抱歉!评论已关闭.