基于jfinal的静态资源版本处理有吗

错觉 发布于 2015/09/22 17:22
阅读 450
收藏 0

@JFinal 你好,想跟你请教个问题:

一般在网站改了css和js的时候为了让用户访问立即生效,一般会加上静态资源后面加上参数,如:xxx.css?v=1.1或者yyy.js?v=2.0之类的强制用户不用本地缓存。

我工程采用的是fremarker组装页面的形式。

比如我的css.html代码如下

<link rel="stylesheet" href="${path}/static/plugins/amazeui/css/amazeui.css">
<link rel="stylesheet" href="${path}/static/css/lzqx.css">
<link rel="stylesheet" href="${path}/static/css/amazeui-customer.css">



然后网站所有页面都引用css.html,请问我是如何加这个版本号呢?我知道手动没问题,我想利用无人值守的方式去实现,请问大家都是如何实现的呢?

加载中
0
JFinal
JFinal

   做个全局拦截器,在此拦截器中为 css、js 这类静态文件设置版本号并存入变量中,然后在 freemarker 模板文件中提取版本号变量值,拦截器大致如下:

public class StaticVersionInterceptor implements Interceptor {
  public void intercept(Invocation inv) {
    inv.invoke();
    inv.getController().setAttr("ver-amaze-css", VerConst.AMAZE_UI_VER);
    .... // 其它要设置的版本号
  }
}
    页面中大致这样:
<link rel="stylesheet" href="${path}/static/plugins/amazeui/css/amazeui.css?${ver-amaze-ui-css}">
   你甚至可以将整个 css 引用定义成一个变量,统一引用。

   在版本号有变化时,改一下 VerConst 中的相关版本号即可。

错觉
错觉
回复 @JFinal : 不过你说的这情况在我这项目里面没有,我就1个地方有,别的模版页面都是include进来这个
JFinal
JFinal
回复 @错觉 : 假如你有很多页面都写了一行对 amaze_ui.css 的引用,你就要改这所有的页面,我给的方案,永远只改一个地方
错觉
错觉
大大,你这个方式还不如我在css.html的每行加个v=xxx了,还多个拦截器,你说说你这方法好在哪? 都需要手动改一个地方的
0
迷茫的中年IT狗
迷茫的中年IT狗

头部文件中定义一个全局变量<#assign ver="201509222235">,就像你的${path}每次只需改一下这个变量值就很方便

每个样式或者js末尾  加上?${ver!}   比如:

<link href="/default.css?${ver!}" rel="stylesheet" type="text/css"/>

<script src="//libs.baidu.com/jquery/1.7.2/jquery.min.js?${ver!}" type="text/javascript"></script>


错觉
错觉
恩 你这个跟我那个基本没区别啊 谢了
0
错觉
错觉

回 楼上兄弟们,我是想无人值守的这种,比如有一种机制可以自动记录如果文件变化了 应该是靠hash吧,然后自动加入v=xxx的后缀,算了我先这样吧,反正也不是总变这个版本

迷茫的中年IT狗
迷茫的中年IT狗
这样行不通吧,最多你把版本号写入数据库,不就是点一下按钮的事吗?
0
如梦技术
如梦技术

这是我之前的一篇文章 《对css,js压缩之combo以及七牛cdn的思考》:http://blog.dreamlu.net/blog/47 可以参考下。

我这现在是还有几个小问题,依然需要再次打磨。提供给大家参考下

返回顶部
顶部