您的位置:首页 > 其它

使用Filter快速对网页资源进行缓存!

2007-06-23 17:46 429 查看
使用Filter快速对网页资源进行缓存,在网页资源没有改变的情况下避免多次HTTP调用!

我们可以通过Filter快速对网页资源进行缓存。你可以在你的web.xml设置一个拦截器,并可以指定特定的内容类型,它可以拦截response,并且可以编辑HTTP头。
代码如下:
package com.xyz

import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class CacheFilter implements javax.servlet.Filter {
  FilterConfig filterConfig = null;

  public void init(FilterConfig filterConfig){
    this.filterConfig = filterConfig;
  }

  public void doFilter(ServletRequest req,
     ServletResponse res,
     FilterChain chain)
     throws IOException, ServletException {

    String sCache = filterConfig.getInitParameter("Cache");

    if(sCache != null){
 ((HttpServletResponse)res).setHeader("Cache-Control", sCache);
    }

    chain.doFilter(req, res);
  }

  public void destroy(){
    this.filterConfig = null;
  }
}

现在,假设我们要使这个filter对所有的jpg请求起作用,那么,你就需要在你的web.xml里增加下面的内容:
<filter>
  <filter-name>Cache</filter-name>
  <filter-class>com.xyz.CacheFilter</filter-class>
  <init-param>
    <param-name>cache</param-name>
    <param-value>public, max-age=2592000</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>Cache</filter-name>
  <url-pattern>*.jpg</url-pattern>
</filter-mapping>

这个filter现在会指示客户端缓存存贮特定的内容(jpg),时间是2592000秒。
这个filter也可以作用于.css和.js文件。事实上,这个filter可以作用于你指定的任何文件类型。只需要简单改变url-pattern 属性或者新增一个。
例如:
<filter>
  <filter-name>Cache</filter-name>
  <filter-class>com.xyz.CacheFilter</filter-class>
  <init-param>
    <param-name>cache</param-name>
    <param-value>public, max-age=2592000</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>Cache</filter-name>
  <url-pattern>*.css</url-pattern>
</filter-mapping>

或者
<filter>
  <filter-name>Cache</filter-name>
  <filter-class>com.xyz.CacheFilter</filter-class>
  <init-param>
    <param-name>cache</param-name>
    <param-value>public, max-age=2592000</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>Cache</filter-name>
  <url-pattern>*.jpg</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>Cache</filter-name>
  <url-pattern>*.css</url-pattern>
</filter-mapping>

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息