因为项目部署在tomcat下,所以使用了default servlet 来处理静态的资源,想必不通过spring mvc 可以加快一些速度,但是后来考虑到静态资源缓存和gzip压缩的考虑,哪种方法好暂且不说,后面列出使用SpringMVC处理静态资源、缓存、GZIP的配置方式。先看下直接使用默认的servlet处理静态资源的配置:
代码语言:javascript复制<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 的配置文件中加入下面的配置:
代码语言:javascript复制<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"/>
代码语言:javascript复制<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秒钟:
使用GZIP后只需要不到3秒钟
用户体验大大的提升。