自动缓存js和css或者image等文件
来源:互联网 发布:淘宝线上活动 编辑:程序博客网 时间:2024/04/28 13:59
第一步:写一个filter,可以根据路径的正则来判断该路径的请求是否需要设置max-age:
public class CacheFilter implements Filter{ private static transient Log logger = LogFactory.getLog(CacheFilter.class); private Integer cacheTime = 3600 * 24; private List<Pattern> patternList = new ArrayList<Pattern>(); private static ResourceBundle rb = ResourceBundle.getBundle("cache-pattern"); public void destroy() { } public void doFilter(ServletRequest rq, ServletResponse rqs, FilterChain fc) throws IOException, ServletException { fc.doFilter(rq, rqs); if (rq instanceof HttpServletRequest && rqs instanceof HttpServletResponse) { HttpServletRequest request = (HttpServletRequest) rq; HttpServletResponse response = (HttpServletResponse) rqs; if (matchPattern(request.getRequestURI())) { response.setHeader("Cache-Control", "max-age=" + cacheTime); if (logger.isDebugEnabled()) { StringBuilder sb = new StringBuilder(); sb.append(" set cache control for uri = ").append(request.getRequestURI()); sb.append(" and the cache time is ").append(cacheTime).append(" second"); logger.debug(sb.toString()); } } } else { if (logger.isWarnEnabled()) { logger.warn("---- the request instance is not instanceof HttpServletRequest ---"); logger.warn("---- the response instance is not instanceof HttpServletResponse ---"); } } } public void init(FilterConfig arg0) throws ServletException { Enumeration<String> keys = rb.getKeys(); while (keys.hasMoreElements()) { String p = keys.nextElement(); String value = rb.getString(p); patternList.add(Pattern.compile(value, Pattern.CASE_INSENSITIVE)); if (logger.isInfoEnabled()) { logger.info(">>>>>>>>>>> init the cache pattern " + value); } } if (arg0 != null) { String ct = arg0.getInitParameter("cache-time"); if (!"".equals(ct) && null != ct) { cacheTime = new Integer(ct); if (logger.isInfoEnabled()) { logger.info(">>>>>>>>>> the cache time is " + cacheTime); } } } } private boolean matchPattern(String url) { for (Pattern pattern : patternList) { if (pattern.matcher(url).matches()) { return true; } } return false; } public static void main(String [] args) throws ServletException { CacheFilter cf = new CacheFilter(); cf.init(null); System.out.println(cf.matchPattern("/css/prototype.CSS")); } }
第二步:在classpath路径下创建一个cache-pattern.properties文件,内容如下:
- 1 = .*ext-all.js
- 2 = .*prototype.js
- 3 = .*/css/.*\\.css
在这个配置文件中,您可以根据js和css的路径来配置哪些目录,或者哪些文件需要设置max-age.
第三步:
在web.xml添加如下内容:
<filter> <filter-name>cache-filter</filter-name> <filter-class>com.filter.CacheFilter</filter-class> <init-param> <param-name>cache-time</param-name> <param-value>86000</param-value> </init-param> </filter> <filter-mapping> <filter-name>cache-filter</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>cache-filter</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping>
如此3步,就可以将js和css文件缓存于无形.快哉.
- 自动缓存js和css或者image等文件
- 浏览器缓存js css等文件
- js和css文件缓存
- django 1.5 static (image,css,js)等文件的使用
- 客户端浏览器缓存Js或者css文件问题
- 清除JS和CSS缓存文件
- go语言http服务处理image/css/js等静态文件
- 关于django中css,js,image等文件无法显示的问题解决。
- springmvc搭建框架时无法加载js或者css等文件
- HTML页面自动清理js、css文件的缓存(自动添加版本号)
- html缓存html,css,js等
- 关于更新发布CSS和JS文件的缓存问题
- 关于更新发布CSS和JS文件的缓存问题
- 关于更新发布CSS和JS文件的缓存问题
- Web移动端使用localStorage缓存Js和css文件
- django设置模板路径和CSS,JS,image等路径的方法
- Yii加载CSS文件或者JS文件
- undefined css/js/image file html文件
- JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI ...解决
- Visual C++串行化编程
- 使用 MFC 串行化数据和 C++ 对象
- MVC、WebForm和Silverlight的一点比较
- Shell变量,判断和控制语句详解
- 自动缓存js和css或者image等文件
- C和C++相互调用
- hibernate 映射文件.hbm.xml 在windows下不区分大小写, 在linux下区分大小写.
- 第7章 SportsStore — 一个真实的应用程序
- linux下备份mysql数据库
- Makefile 語法簡介
- python和C/C++的互相调用 VC
- 在 C++ 中使用 Python script
- 什么是序列化