基于JFinal的资源文件Handler HttpCacheHandler
基于JFinal的资源文件Handler HttpCacheHandler
如梦技术 发表于4年前
基于JFinal的资源文件Handler HttpCacheHandler
  • 发表于 4年前
  • 阅读 473
  • 收藏 4
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

上一篇文章讲到了对js,css的压缩的ComboHandler

对其更新到BAE并没有达到自己想要的效果,每次HTTP请求需要耗时2~5s。

加上了BAE的cdn也丝毫没有改善,尝试对url添加.js,.css等会报404不知道BAE具体是啥实现的!

又不想放弃那么帅的压缩合并,于是这个HttpCacheHandler产生了。

整个代码不多注释还算全,直接上代码吧!

// 默认MAX_AGE:一个月
private static final long MAX_AGE = ConfigUtil.getToLong("max_age");

@Override
public void handle(String target, HttpServletRequest request,
        HttpServletResponse response, boolean[] isHandled) {
    // 最后修改时间
    long ims = request.getDateHeader("If-Modified-Since");
    long now = System.currentTimeMillis();
    // 进一步ETag文件MD5比较"If-None-Match" eq "ETag" 
    // String token = request.getHeader("If-None-Match");
    // 如果header头没有过期
    if(ims + MAX_AGE > now){
        isHandled[0] = true;
        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
        return;
    }
    nextHandler.handle(target, request, response, isHandled);
    // 去除对页面的缓存,造成后台进不去
    // 验证是否静态文件 静态文件缓存30天
    if(target.indexOf(".") > 0 || target.endsWith("/combo")){
        // 新生成http cache头信息
        response.setHeader("ETag", StrKit.getTonken());
        response.setHeader("Cache-Control", "max-age=" + MAX_AGE);
        response.addDateHeader("Expires", now + MAX_AGE);
        response.addDateHeader("Last-Modified", now);
    }
}

对于BAE没有加上cdn path的图片也能缓存!

博客原文:http://www.dreamlu.net/blog/18

标签: JFinal
共有 人打赏支持
如梦技术
粉丝 292
博文 30
码字总数 13797
作品 4
×
如梦技术
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: