Bootstrap

项目中缓存的处理

2021SC@SDUSC

页面的缓存状态是由http header决定的,主要包括Pragma: no-cache、Cache-Control、 Expires、 Last-Modified、If-Modified-Since。

首先对项目进行配置,在web.xml中作为filter的初始化变量设置进去:

进行了两种设置,因为大部分资源可以不缓存,所以将全部资源设置为不缓存,对于一些特殊的资源,进行缓存处理。如图片等等。

</filter >
    <filter >  
        <filter -name >NoCache < /filter -name >  
        <filter - class >com.superkaiwii.core.web.filter.ResponseHeaderFilter < /filter - class >  
        <init -param >  
            <param -name >Cache -Control < /param -name >  
            <param -value >no -cache , must -revalidate < /param -value >  
        < /init -param >  
    < /filter > 
    <filter -mapping >  
         <filter -name >NoCache < /filter -name >  
         <url -pattern >*. do < /url -pattern >  
    < /filter -mapping >
    <filter >  
        <filter -name >CacheForWeek < /filter -name >  
        <filter - class >com.superkaiwii.core.web.filter.ResponseHeaderFilter < /filter - class >  
        <init -param >  
            <param -name >Cache -Control < /param -name >  
            <param -value >max -age = 604800,  public < /param -value >  
        < /init -param >  
    < /filter >
     <filter -mapping >  
         <filter -name >CacheForWeek < /filter -name >  
         <url -pattern > /images

利用filter对每个请求的header作处理。ResponseHeaderFilter的示例代码如下所示:

每一个通过这个filter的请求,filter都将<init-param>的参数值赋值到响应的header中


public  class ResponseHeaderFilter
  implements Filter
{
   private FilterConfig fc ;

   public  void doFilter (ServletRequest paramServletRequest , ServletResponse paramServletResponse , FilterChain paramFilterChain )
    throws IOException , ServletException
   {
    HttpServletResponse localHttpServletResponse  =  (HttpServletResponse )paramServletResponse ;
    Enumeration localEnumeration  =  this.fc.getInitParameterNames ();
     while  (localEnumeration.hasMoreElements ())
     {
      String str  =  (String )localEnumeration.nextElement ();
      localHttpServletResponse.addHeader (str ,  this.fc.getInitParameter (str ));
     }
    paramFilterChain.doFilter (paramServletRequest , localHttpServletResponse );
   }

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

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

;