代码之家  ›  专栏  ›  技术社区  ›  Itay Maman

Tomcat:缓存控制

  •  41
  • Itay Maman  · 技术社区  · 14 年前

    码头有一个 CacheControl parameter (可以指定webdefault.xml)确定客户端的缓存行为(通过影响发送到客户端的头)。

    Tomcat有类似的选择吗? 简而言之,我想关闭Tomcat服务器和/或特定webapp提供的所有页面的缓存?

    更新

    请注意,我不是指服务器端缓存。我希望服务器告诉所有客户机(浏览器)不要使用自己的缓存,并且总是从服务器获取内容。我想同时为所有资源(包括静态资源(.css,.js等)执行此操作。

    6 回复  |  直到 14 年前
        1
  •  33
  •   Community arnoo    7 年前

    与上面的文章类似,只是代码有一些问题。这将禁用所有浏览器缓存:

    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Date;
    
    public class CacheControlFilter implements Filter {
    
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain) throws IOException, ServletException {
    
            HttpServletResponse resp = (HttpServletResponse) response;
            resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
            resp.setDateHeader("Last-Modified", new Date().getTime());
            resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
            resp.setHeader("Pragma", "no-cache");
    
            chain.doFilter(request, response);
        }
    
    }
    

    然后在web.xml中映射,如中所述 Stu Thompson's answer .

        2
  •  38
  •   Jack    8 年前

    由于Tomcat 7提供了一个容器Expires过滤器,可能会有所帮助。见:

    ExpServer过滤器是一个Java Servlet API端口 Apache mod_expires . 此筛选器控制 Expires HTTP头和 max-age 指令 Cache-Control 服务器响应中的HTTP头。过期日期可以设置为相对于源文件上次修改的时间,也可以设置为相对于客户端访问的时间。

    <filter>
        <filter-name>ExpiresFilter</filter-name>
        <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
        <init-param>
            <param-name>ExpiresByType image</param-name>
            <param-value>access plus 10 days</param-value>
        </init-param>
        <init-param>
            <param-name>ExpiresByType text/css</param-name>
            <param-value>access plus 10 hours</param-value>
        </init-param>
        <init-param>
            <param-name>ExpiresByType application/javascript</param-name>
            <param-value>access plus 10 minutes</param-value>
        </init-param>
        <!-- Let everything else expire immediately -->
        <init-param>
            <param-name>ExpiresDefault</param-name>
            <param-value>access plus 0 seconds</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>ExpiresFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    
        3
  •  14
  •   naXa stands with Ukraine    8 年前

    我不相信有这样的配置。但是,编写一个过滤器来设置每个webapp的缓存控制头不应该太费劲。例如。:

    public class test implements Filter {
    
            public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                    throws IOException, ServletException {
    
                chain.doFilter(request, response);
                ((StatusResponse)response).setHeader("Cache-Control",
                        "max-age=0, private, must-revalidate");
            }
    
            public void destroy() {}
    
            public void init(FilterConfig arg0) throws ServletException {}
    }
    

    你可以把这段代码放到你的webapp里 web.xml 文件。

    <filter>
        <filter-name>SetCacheControl</filter-name>
        <filter-class>ch.dietpizza.cacheControlFilter</filter-class>
    </filter>                       
    <filter-mapping>
        <filter-name>SetCacheControl</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
        4
  •  1
  •   CXJ    12 年前

    Tomcat配置中实际上有几个元素直接影响到这一点。参见文档 http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html 例如。

    Atlassian建议使用以下两个语句启用浏览器端缓存,以便Microsoft Internet Explorer能够正确下载和查看附加文档:

    <Valve className="org.apache.catalina.authenticator.FormAuthenticator" securePagesWithPragma="false" />
    <Valve className="org.apache.catalina.authenticator.NonLoginAuthenticator" securePagesWithPragma="false" />
    
        5
  •  0
  •   Inv3r53    14 年前

    可能这就是你想要的:

    http://tomcat.apache.org/tomcat-6.0-doc/config/context.html#Context%20Parameters

        cachingAllowed : If the value of this flag is true, the cache for static
    
     resources will be used. If not specified, the default value of the flag is true.
    

    更改此标志后,还要删除/work/catalina/localhost中的application cache文件夹。

        6
  •  0
  •   Sean Owen    14 年前

    我知道的唯一参数是 disableProxyCaching <Valve> 元素。见 here .