2012-08-14 70 views
1

如何定义页面缓存内容?我使用谷歌铬合金审计功能,它告诉我:在JSP中启用浏览器缓存

The following resources are explicitly non-cacheable. Consider making them cacheable if possible. 

我创建了一个新的Filter被称为每个请求:

public class CachingFilter implements Filter { 

    public void init(FilterConfig filterConfig) { 
    } 

    public void destroy() { 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

    HttpServletResponse httpResponse = (HttpServletResponse) response; 

     httpResponse.setHeader("Cache-Control", "private"); 
     httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 604800000L); // one week 
     httpResponse.setDateHeader("Max-Age", System.currentTimeMillis() + 604800000L); 

     chain.doFilter(request, response); 
    } 
} 

Filter作品所有的JavaScript文件,因为他们不” t再次出现在Google审核工具中。但是我仍然得到一张图像列表和主要的JSP文件。我还需要设置哪些其他头文件才能为它们启用缓存?

这是一个图像的Request-Header

Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:entries=20; JSESSIONID=fSSOjMOknqW4yk0bH1Nxy2Ea.undefined 
Host:localhost:8080 
If-Modified-Since:Mon, 13 Aug 2012 12:52:32 GMT 
If-None-Match:W/"1685-1344862352945" 
Referer:http://localhost:8080/SSIS2_JBoss7/View/PackageManagement/Packages.jsp 
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1 

而且图像的Response-Header

Cache-Control:private 
Date:Thu, 16 Aug 2012 08:33:05 GMT 
ETag:W/"1685-1344862352945" 
Expires:Thu, 23 Aug 2012 08:33:05 GMT 
Max-Age:Thu, 23 Aug 2012 08:33:05 GMT 
Pragma:No-cache 
+0

您确定Chrome审核是将JSP文件本身引用d不是由JSP生成的HTML输出引用的CSS/JS /图像资源?如果是后者,那么你显然需要在这些资源的响应上设置标题,而不是在JSP的响应上。 – BalusC 2012-08-15 13:36:36

+0

是的,Chrome审核是指JSP文件,图像(png,gif),JavaScript文件和CSS文件。 – doonot 2012-08-16 07:02:34

回答

0

我不得不以缓存所有图像和主JSP文件中添加此行:

httpResponse.setHeader("Pragma", "private");