基于JFinal的资源文件Handler HttpCacheHandler

上一篇文章讲到了对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)