控制静态资源(html,css,js)的缓存时间的过滤器

本文介绍了一个名为NeedCacheFilter的Servlet过滤器,该过滤器用于控制HTML、CSS和JS静态资源的缓存时间。通过读取配置文件中的参数,根据不同类型的资源设置不同的缓存时间(单位为小时)。过滤器会根据请求的URI获取文件扩展名,并据此判断资源类型,然后设置响应头的Expires字段来控制缓存。配置文件中分别设置了html、css和js的缓存时间为1小时、2小时和3小时。
控制静态资源(html,css,js)的缓存时间的过滤器


--------------------------------------------------------------------------------------
public class NeedCacheFilter implements Filter {


        private FilterConfig filterConfig;  // 用来获取配置文件中的参数
        
        public void init(FilterConfig filterConfig) throws ServletException {
                this.filterConfig = filterConfig;
        }


        public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
                HttpServletRequest request = (HttpServletRequest) req;
                HttpServletResponse response = (HttpServletResponse) resp;
                // 获取html、css、js各自的缓存时间,如果没有,给个默认值为1小时
                int time = 1;
                String uri = request.getRequestURI();  //  /day19/1.html
                String extendName = uri.substring(uri.lastIndexOf(".")+1);
                
                if("html".equals(extendName)){
                        // 访问的html资源
                        String value = filterConfig.getInitParameter("html");
                        if(value!=null){
                                time = Integer.parseInt(value);
                        }
                }
                if("css".equals(extendName)){
                        // 访问的css资源
                        String value = filterConfig.getInitParameter("css");
                        if(value!=null){
                                time = Integer.parseInt(value);
                        }
                }
                if("js".equals(extendName)){
                        // 访问的js资源
                        String value = filterConfig.getInitParameter("js");
                        if(value!=null){
                                time = Integer.parseInt(value);
                        }
                }
                
                response.setDateHeader("Expires", System.currentTimeMillis()+time*60*60*1000);
                chain.doFilter(request, response);
        }


        public void destroy() { }


}
--------------------------------------------------------------------------------------
配置如下
  <filter>
          <filter-name>NeedCacheFilter</filter-name>
          <filter-class>cn.itcast.filter.example.NeedCacheFilter</filter-class>
          <init-param>
                  <param-name>html</param-name>
                  <param-value>1</param-value>   <!-- 单位是小时  -->
          </init-param>
          <init-param>
                  <param-name>css</param-name>
                  <param-value>2</param-value>   <!-- 单位是小时  -->
          </init-param>
          <init-param>
                  <param-name>js</param-name>
                  <param-value>3</param-value>   <!-- 单位是小时  -->
          </init-param>
  </filter>
  
  <filter-mapping>
          <filter-name>NeedCacheFilter</filter-name>
          <url-pattern>*.html</url-pattern>
  </filter-mapping>
   <filter-mapping>
          <filter-name>NeedCacheFilter</filter-name>
          <url-pattern>*.css</url-pattern>
  </filter-mapping>
  <filter-mapping>
          <filter-name>NeedCacheFilter</filter-name>
          <url-pattern>*.js</url-pattern>
  </filter-mapping>
--------------------------------------------------------------------------------------





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值