SpringMVC会在dispatchServlet拦截请求,所有在我们配置的时候,如果将所有请求都拦截了,连同静态资源也会拦截。
有两种方式对静态资源进行访问:
1、配置default-servlet-handler,SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,它会检查DispatchServlet的URL。然后如果发现是静态资源,就由web应用服务器的默认Servlet处理,如果是其他请求就直接交由相应的handler处理。
2、使用mvc:resources配置,定义相应的静态资源映射。
配置default-servlet-handler非常简单,就一行配置就完成了:
<mvc:default-servlet-handler />
使用mvc:resources配置也不复杂:
<mvc:resources mapping="/resource" location="/" /> mapping是访问的路径,location是实际的访问资源的位置。
例如我想访问/image/abc.jpg 在客户端输入的路径就为/resource/image/abc.jpg
静态资源缓存
我们可以使用静态缓存cache-period,但是缓存之后,如果我们的静态资源文件更新了,用户也是用旧缓存的,只要未达到过期时间。
<mvc:resources cache-period="2592000" mapping="/#{re.resourcePath}/**" location="/"/>
所以我们希望在我们更新静态资源后,用户会使用新的静态资源,所以我们需要采用动态的mapping资源映射目录。
public class ResourcePathExposer implements ServletContextAware { private ServletContext servletContext; private String resourcePath; public void init(){ String version = "1.0"; String path = "/resource"; this.resourcePath = path + "-" + version; this.servletContext.setAttribute("resourcePath",this<