Spring MVC 静态资源缓存,GZIP配置

因为项目部署在tomcat下,所以使用了default servlet 来处理静态的资源,想必不通过spring mvc 可以加快一些速度,但是后来考虑到静态资源缓存和gzip压缩的考虑,哪种方法好暂且不说,后面列出使用SpringMVC处理静态资源、缓存、GZIP的配置方式。先看下直接使用默认的servlet处理静态资源的配置:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/upload/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
</servlet-mapping>
<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>

下面是使用SpringMVC处理静态资源的配置:

首先web.xml中的spring mvc 的url-pattern就不能是*.do,而应该是一个/,当你将spirng 的servlet地址配置为一个/的时候就要考虑处理好静态的资源文件,下面两个配置是用来处理静态资源的。

然后再spring mvc 的配置文件中加入下面的配置:

<mvc:resources mapping="/resources/**" cache-period="3000" location="/resources/" order="0">
    <mvc:resource-chain resource-cache="true">
        <mvc:resolvers>
            <bean class="org.springframework.web.servlet.resource.GzipResourceResolver"/>
        </mvc:resolvers>
    </mvc:resource-chain>
</mvc:resources>
<mvc:resources mapping="/static/**" cache-period="30" location="/static/" order="0"/>
<mvc:default-servlet-handler default-servlet-name="default" />

因为我这里的静态文件都在resources和static目录下,所以这里只配置了这两个路径。后面的location最后一定要有一个/结束,否则静态资源是访问不到的,order参数是Spring配置的优先级,数字越小越优先。cache-period是缓存的秒数,这里将resources的缓存设置为3000秒,也就是50分钟,static的是30秒。然后在resources里面配置了GzipResourceResolver,是用来尝试返回GZIP的文件,如果有则返回,没有就返回原文件。像是比较大的JS文件就应该使用GZIP压缩后的文件返回,可以大大的减小下载的时间。

举个例子:1MB的网速,下载EXTJS的文件需要8秒钟:

1

使用GZIP后只需要不到3秒钟

2

用户体验大大的提升。