Filter(四)常见应用3---控制浏览器缓存一些静态资源

来源:互联网 发布:java拦截器的原理 编辑:程序博客网 时间:2024/05/21 18:52

一些动态页面中可能会包含一些修饰页面样式的js和css文件,这些文件对这个网页来说,是相对较长时间不会发生变化的,因此这些文件在第一次访问这些页面时,可以实现让浏览器将其缓存下来,这样可以避免每次访问此网页时,多次下载此文件,加速了访问速度。另外为了避免长时间不访问此网页,而起相关的类似js和css的静态资源一直被缓存着,可以设置其缓存时间,在此时间内,对其进行缓存,超过此时间,将其从缓存中清空。

利用过滤器技术,可以实现上述功能,在给出示例代码前,需要解释下,如何控制缓存一个文件的时间,如下:

response.setDateHeader("expires", System.currentTimeMillis()+value);
通过此可以设置缓存时间;

下面是一个示例,此例子可扩展性较强,此例子可以缓存css,js,jpg等

<filter>  <filter-name>StaticContentFilter</filter-name>  <filter-class>cn.itcast.utils.StaticContentFilter</filter-class>  <init-param>  <param-name>css</param-name>  <param-value>10</param-value>  </init-param>    <init-param>  <param-name>js</param-name>  <param-value>20</param-value>  </init-param>    <init-param>  <param-name>jpg</param-name>  <param-value>30</param-value>  </init-param>    </filter>  <filter-mapping>  <filter-name>StaticContentFilter</filter-name>  <url-pattern>*.jpg</url-pattern>  <dispatcher>REQUEST</dispatcher>  <dispatcher>FORWARD</dispatcher>  </filter-mapping>

//Filter

public class StaticContentFilter implements Filter {private FilterConfig config;@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub//类型转换HttpServletRequest request = (HttpServletRequest)req;HttpServletResponse response = (HttpServletResponse)resp;//获取资源类型String uri = request.getRequestURI();String type = uri.substring(uri.lastIndexOf(".")+1);String time = config.getInitParameter(type);System.out.println(type+":"+time);//设置缓存时间if(time!=null){System.out.println(type+":"+time);int value = (int) (Long.parseLong(time)*1000);response.setDateHeader("expires", System.currentTimeMillis()+value);}chain.doFilter(request, response);}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stubthis.config = config;}}



0 0
原创粉丝点击