jsp静态资源的缓存

     在jsp页面中有很多资源都是静态的,很少发生改变。如引入的js,css文件,如果每次加载页面都要到服务器去请求这些文件,会造成一定的浪费,如果将这些资源进行缓存,用户体验就会更好。思路是这样,服务第一次接受静态资源的请求后得到资源输出给客户,输出时设置缓存,下次请求利用浏览器的缓存机制从缓存中获取资源文件。

     这就需要做两方面的工作:

     第一、静态资源的路径需要添加版本号,如js文件要写出<script  src ="/js/menu.js?__V=1248657811953 "  type ="text/javascript " >,这里的版本号采用的是js文件的lastModified属性,这样但服务器端的js有改动的话,版本号就会变化,从而重新加载新的js资源文件。这里就需要写相应的jsp tag类了,用于生成合适的资料路径。有关如何定制jsp tag请参考相关的文档。

 

    第二、输出文件时添加缓存,我们这里采用的是在filter中添加缓存,在web.xml中定义如下内容:

<filter-mapping>
        <filter-name>StaticResourceFilter</filter-name>
        <url-pattern>/js/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>StaticResourceFilter</filter-name>
        <url-pattern>/css/*</url-pattern>
    </filter-mapping>

    这样css和js文件的请求都会经过StaticResourceFilter,于是css和js目录下的所有文件都会被缓存,在这个filter里,我们就可以在输出css和js资源时,添加过期头了。代码类似:

public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
            throws IOException, ServletException {

        // add expire head.
        response.setHeader("Cache-Control", ?);
        response.setDateHeader("Expires", ?);
        chain.doFilter(request, response);
    }

 根据自己的需要添加相应的控制。有关response的过期头知识可参考:http://sites.google.com/site/wisedukb/Home/response-expire-header

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值