文档章节

基于JFinal的资源文件Handler HttpCacheHandler

如梦技术
 如梦技术
发布于 2013/07/04 22:24
字数 288
阅读 495
收藏 4

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

© 著作权归作者所有

共有 人打赏支持
如梦技术

如梦技术

粉丝 320
博文 39
码字总数 15442
作品 4
朝阳
后端工程师
私信 提问
JFinal集成YUI Compressor压缩合并JS和CSS

对js和css合并压缩能减少HTTP请求次数,加快网站的访问数度,是Web性能优化最佳实践中最重要的一条! 源参考自窝窝团研发副总裁文章,基于Jfinal实现的Combo Handler! 使用方法: href="ht...

如梦技术
2013/07/04
0
2
使用Rythm插件轻松实现JFinal应用的国际化

刚看了@eyelee同学的JFinal 国际化的简单实现的文章,我打算分享一下自己为@紫电清霜的JFinal-BBS示例应用添加Rythm模版引擎和国际化功能展示的经验。 在开始之前,大家可以先通过点击这个视...

罗格林
2013/06/05
0
13
JFinal如何使用freemarker插件做国际化?

@JFinal 你好,想跟你请教个问题:JFinal如何使用freemarker插件做国际化?以前是使用Spring,在xml配置一下加载一个资源文件就可以使用了(加载一个spring.ftl)。通过session实现国际化。 ...

bing_chuan
2013/04/07
496
0
jfinal-swagger让你的应用接口更加简单

前言 前两天逛jfinal社区,看到jfinal-swagger项目,接触到swagger,研究了一番对部分代码进行修改,成功整合到LMS,支持jfinal 多模块扫描,去除冗余依赖,修改try it out 问题等 。具体代码...

冷冷gg
2017/07/13
0
3
JFinal文件上传问题

@JFinal 你好,想跟你请教个问题: 新手刚学习JFianl 遇见一个问题,关于文件上传的: UploadFile uploadFile = getFile("file")或者UploadFile uploadFile = getFile(getPara("file")); 如果...

火龙战士
2016/05/31
194
1

没有更多内容

加载失败,请刷新页面

加载更多

node.js学习笔记之koa框架和简单爬虫练习

Koa -- 基于 Node.js 平台的下一代 web 开发框架 koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 koa 编写 web 应用,可以免除重复繁琐的回调...

前端小攻略
22分钟前
3
0
JavaScript中的继承及实现代码

JS虽然不像是JAVA那种强类型的语言,但也有着与JAVA类型的继承属性,那么JS中的继承是如何实现的呢? 一、构造函数继承 在构造函数中,同样属于两个新创建的函数,也是不相等的 function Fn...

peakedness丶
44分钟前
3
0
记一次面试最常见的10个Redis"刁难"问题

导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。 Redis在...

小刀爱编程
57分钟前
16
0
TiDB Lab 诞生记 | TiDB Hackathon 优秀项目分享

本文由红凤凰粉凤凰粉红凤凰队的成员主笔,他们的项目 TiDB Lab 在本届 TiDB Hackathon 2018 中获得了二等奖。TiDB Lab 为 TiDB 培训体系增加了一个可以动态观测 TiDB / TiKV / PD 细节的动画...

TiDB
今天
4
0
当区块链遇到零知识证明

本文由云+社区发表 当区块链遇到零知识证明 什么是零知识证明 零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的。这个定义有点抽象,下面笔者举...

腾讯云加社区
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部