2012-04-10 21 views
0
/** 
* 
*/ 


public class NoCacheFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest httpReq = (HttpServletRequest) request; 
     HttpServletResponse httpRes = (HttpServletResponse) response; 

     if (!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc) 
      httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
      httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
      httpRes.setDateHeader("Expires", 0); // Proxies. 
     } 

     chain.doFilter(request, response); 
    } 

    // ... 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void destroy() { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 

しかし、動作していませんが、前と後ろのボタンを押しながらページを取得できます。 助けてください。既にすべての既存のキャッシュをクリアしました。BrowserCacheの削除動作しません。

答えて

1

フィルタのinit()destroy()の間に意図的に例外をスローしないでください。 init()が例外をスローすると、フィルタはサービスに入れられず、一部のサーバはWebアプリケーションのデプロイメントを完全に中止します。

何もない場合は、を実装する必要があります。

@Override 
public void init(FilterConfig filterConfig) throws ServletException { 
    // NOOP. 
} 

@Override 
public void destroy() { 
    // NOOP. 
} 

また、フィルタが適切なURLパターンまたはサーブレット名にマップされていることを確認する必要があります。最も簡単なのは、をクラスに入れて、Faces ServletがのようにFacesServletというエントリのサーブレット名と正確に一致するようにすることです。

+0

ありがとうございました。 – user1281029

関連する問題