1. import java.io.*;  
  2. import java.util.*;  
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import com.elink.util.*;  
  6.   
  7. public class BusiCacheFilter implements Filter  
  8. {  
  9.  private FilterConfig config  = null;  
  10.  private HashMap expiresMap = new HashMap();  
  11.  
  12.  public void init(FilterConfig filterConfig)  
  13.  {  
  14.   this.config = filterConfig;  
  15.   expiresMap.clear();  
  16.   Enumeration names = config.getInitParameterNames();  
  17.   while( names.hasMoreElements() )  
  18.   {  
  19.    try 
  20.    {  
  21.     String name = (String)names.nextElement();  
  22.     String value = config.getInitParameter( name );  
  23.     Integer expire = Integer.valueOf( value );  
  24.     expiresMap.put( name, expire );  
  25.    }  
  26.    catch( Exception ex)  
  27.    {  
  28.    }  
  29.   }  
  30.  }  
  31.  
  32.  public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain)  
  33.   throws IOException, ServletException  
  34.  {  
  35.   HttpServletRequest req = (HttpServletRequest) request;  
  36.   HttpServletResponse res = (HttpServletResponse) response;  
  37.     
  38.   String uri = req.getRequestURI();  
  39.   String ext = null;  
  40.   int dot =  uri.lastIndexOf(".");  
  41.   if( dot != -1 )  
  42.   {  
  43.    ext = uri.substring( dot+1 );  
  44.   }  
  45.     
  46.   setResponseHeader( res, uri, ext );  
  47.   chain.doFilter(request, response);  
  48.  }  
  49.  
  50.  public void destroy()  
  51.  {  
  52.  }  
  53.    
  54.  protected FilterConfig getFilterConfig()  
  55.  {  
  56.   return (config);  
  57.  }  
  58.    
  59.    
  60.  private void setResponseHeader( HttpServletResponse response, String uri, String ext )  
  61.  {  
  62.   if( ext!= null && ext.length() > 0 )  
  63.   {  
  64.    Integer expires = (Integer)expiresMap.get(ext);  
  65.    if( expires != null )  
  66.    {  
  67.     LogUtil.logDebug( uri + ".Expires: "+ expires.intValue());  
  68.     if( expires.intValue() > 0 )  
  69.     {  
  70.      response.setHeader("Cache-Control","max-age="+expires.intValue()); //HTTP 1.1  
  71.     }  
  72.     else 
  73.     {  
  74.      response.setHeader("Cache-Control","no-cache");  
  75.      response.setHeader("Pragma","no-cache"); //HTTP 1.0  
  76.      response.setDateHeader ("Expires"0 );  
  77.     }  
  78.    }  
  79.   }  
  80.  }  
  81. }  
  82.  
  83. web.xml  
  84.  
  85. <filter>  
  86.  <filter-name>busicachefilter</filter-name>  
  87.  <filter-class>com.elink.control.BusiCacheFilter</filter-class>  
  88.  <init-param>  
  89.   <param-name>js</param-name>  
  90.   <param-value>3600</param-value>  
  91.  </init-param>  
  92.  <init-param>  
  93.   <param-name>gif</param-name>  
  94.   <param-value>3600</param-value>  
  95.  </init-param>  
  96.  <init-param>  
  97.   <param-name>jpg</param-name>  
  98.   <param-value>3600</param-value>  
  99.  </init-param>  
  100.  <init-param>  
  101.   <param-name>css</param-name>  
  102.   <param-value>3600</param-value>  
  103.  </init-param>  
  104.   </filter>  
  105.   <filter-mapping>  
  106.  <filter-name>busicachefilter</filter-name>  
  107.  <url-pattern>*.js</url-pattern>  
  108.   </filter-mapping>  
  109.   <filter-mapping>  
  110.  <filter-name>busicachefilter</filter-name>  
  111.  <url-pattern>*.gif</url-pattern>  
  112.   </filter-mapping>  
  113.   <filter-mapping>  
  114.  <filter-name>busicachefilter</filter-name>  
  115.  <url-pattern>*.jpg</url-pattern>  
  116.   </filter-mapping>  
  117.   <filter-mapping>  
  118.  <filter-name>busicachefilter</filter-name>  
  119.  <url-pattern>*.css</url-pattern>  
  120.   </filter-mapping>  
  121.