自动缓存js和css或者image等文件

第一步:写一个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. 1 = .*ext-all.js  
  2. 2 = .*prototype.js  
  3. 3 = .*/css/.*\\.css  
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文件缓存于无形.快哉.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值