用 Servlet Filter 缓存页面图片、js教本等静态信息(源码)

类别:Java 点击:0 评论:0 推荐:

摘自久久学院

/*
 * <p>Company: 凌科软件 www.elingke.com </p>
 * @author liubaojun
 * @version 1.0
 * 来源于 elinkBSP 部分源代码
 */
 
package com.elink.control;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.elink.util.*;

/**
 * @author liubj
 */

public class BusiCacheFilter implements Filter
{
 private FilterConfig config  = null;
 private HashMap expiresMap = new HashMap();

 public void init(FilterConfig filterConfig)
 {
  this.config = filterConfig;
  expiresMap.clear();
  Enumeration names = config.getInitParameterNames();
  while( names.hasMoreElements() )
  {
   try
   {
    String name = (String)names.nextElement();
    String value = config.getInitParameter( name );
    Integer expire = Integer.valueOf( value );
    expiresMap.put( name, expire );
   }
   catch( Exception ex)
   {
   }
  }
 }

 public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException
 {
  HttpServletRequest req = (HttpServletRequest) request;
  HttpServletResponse res = (HttpServletResponse) response;
  
  String uri = req.getRequestURI();
  String ext = null;
  int dot =  uri.lastIndexOf(".");
  if( dot != -1 )
  {
   ext = uri.substring( dot+1 );
  }
  
  setResponseHeader( res, uri, ext );
  chain.doFilter(request, response);
 }

 public void destroy()
 {
 }
 
 protected FilterConfig getFilterConfig()
 {
  return (config);
 }
 
 
 private void setResponseHeader( HttpServletResponse response, String uri, String ext )
 {
  if( ext!= null && ext.length() > 0 )
  {
   Integer expires = (Integer)expiresMap.get(ext);
   if( expires != null )
   {
    LogUtil.logDebug( uri + ".Expires: "+ expires.intValue());
    if( expires.intValue() > 0 )
    {
     response.setHeader("Cache-Control","max-age="+expires.intValue()); //HTTP 1.1
    }
    else
    {
     response.setHeader("Cache-Control","no-cache");
     response.setHeader("Pragma","no-cache"); //HTTP 1.0
     response.setDateHeader ("Expires", 0 );
    }
   }
  }
 }
}



web.xml

<filter>
 <filter-name>busicachefilter</filter-name>
 <filter-class>com.elink.control.BusiCacheFilter</filter-class>
 <init-param>
  <param-name>js</param-name>
  <param-value>3600</param-value>
 </init-param>
 <init-param>
  <param-name>gif</param-name>
  <param-value>3600</param-value>
 </init-param>
 <init-param>
  <param-name>jpg</param-name>
  <param-value>3600</param-value>
 </init-param>
 <init-param>
  <param-name>css</param-name>
  <param-value>3600</param-value>
 </init-param>
  </filter>
  <filter-mapping>
 <filter-name>busicachefilter</filter-name>
 <url-pattern>*.js</url-pattern>
  </filter-mapping>
  <filter-mapping>
 <filter-name>busicachefilter</filter-name>
 <url-pattern>*.gif</url-pattern>
  </filter-mapping>
  <filter-mapping>
 <filter-name>busicachefilter</filter-name>
 <url-pattern>*.jpg</url-pattern>
  </filter-mapping>
  <filter-mapping>
 <filter-name>busicachefilter</filter-name>
 <url-pattern>*.css</url-pattern>
  </filter-mapping>


本文地址:http://com.8s8s.com/it/it12485.htm