在Spring MVC框架中,针对静态资源的请求处理除了能够配置< mvc:default-servlet-handler />标签,经过容器来处理之外,还能够使用< mvc:resources />标签,在框架层面来处理。web
从Spring MVC的XML Schema文件说明中能够知道,经过< mvc:resources />标签的配置能够使在Spring MVC框架中,配置一个Handler来处理静态资源,例如:图片,JS,CSS等文件,并经过配置Cache相关的Headers来使浏览器可以更有效的进行加载。同时,该配置容许将静态资源放在任何Spring MVC框架可以读取到的路径下。浏览器
< mvc:resources />主要有如下配置:缓存
mapping(必填,类型:string)基于当前Servlet上下文的URL匹配规则,例如:"/resources/**"。服务器
location(必填,类型:string)静态资源的放置路径,知足Spring资源的匹配规则,能够使用"classpath:"。当存在多个路径时,经过","来进行拼接,例如:"/, classpath:/META-INF/public-web-resources/"。mvc
cache-period(选填,类型:string)用来配置Handler类针对静态资源的缓存时间,以秒为单位。默认状况下不会发送任何缓存的Header,仅仅依赖last-modified参数的修改时间戳。当设置为0时,表示禁止进行资源缓存;当设置一个正整数时,表示资源缓存的最长有效时间。app
order(选填,类型:int)用来配置Handler类处理请求的顺序,默认为最低优先级的值-1。框架
在ResourceHttpRequestHandler类中经过解析标签中location对应的参数,来从服务器或jar包中获取静态资源。性能
同时,能够经过配置VersionResourceResolver类,GzipResourceResolver类,与CachingResourceResolver类等解析器类或CssLinkResourceTransformer类,AppCacheManifestTransformer类等转换器类,来提供针对静态资源添加版本号,Gzip压缩等自定义的处理过程。而默认仅使用PathResourceResolver类来根据URL查询静态资源。优化
在处理Request请求时,ResourceHttpRequestHandler类默认会针对Headers请求头中的Last-Modified参数进行计算,以此来判断是否返回请求码304,通知浏览器使用缓存数据,以此来提高请求响应效率。spa
因为Spring MVC中框架处理的请求所有经过DispatcherServlet类来进行处理,所以,没法直接的针对静态资源请求进行很友好的兼容处理。于此,框架提供了两种处理策略来进行处理:
经过< mvc:default-servlet-handler />标签来转移请求处理过程,交由WEB容器进行高效的处理。能够更好的依赖容器自身的请求处理能力,承担静态资源请求的处理过程;
经过< mvc:resources />标签来配置对应的Resolver类和Transformer类来在框架层面进行静态资源请求的处理,以达到解耦容器的目的。并经过集成请求响应的优化处理逻辑,来知足业务与性能的需求。