Tomcat:caching控制

Jetty有一个CacheControl参数 (可以指定webdefault.xml)来决定客户端的caching行为(通过影响发送到客户端的头文件)。

Tomcat有类似的select吗? 总之,我想closures由tomcat服务器和/或特定的webapp提供的所有页面的caching?

更新

请注意,我不是指服务器端caching。 我希望服务器告诉所有的客户端(浏览器)不要使用他们自己的caching,并总是从服务器获取内容。 我想要一次完成所有的资源,包括静态资源(.css,.js等)。

类似于上面的post,除了这个代码有一些问题。 这将禁用所有浏览器caching:

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); } } 

然后按照Stu Thompson的回答在web.xml中进行映射。

由于Tomcat 7有一个容器提供了expiresfilter,可能有所帮助。 看到:

ExpiresFilter是Apache mod_expires的Java Servlet API端口。 此filter控制服务器响应中的Expires HTTP标头和Cache-Control HTTP标头的max-age指令的设置。 到期date可以设置为相对于源文件最后一次修改的时间或客户端访问时间。

 <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> 

我不相信有这样的configuration。 但是,编写一个filter来设置每个Web应用程序的caching控制头文件应该不会太费事。 例如:

 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> 

实际上在Tomcatconfiguration中有几个元素直接影响到这一点。 例如,请参阅http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html上的文档&#x3002;

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

 <Valve className="org.apache.catalina.authenticator.FormAuthenticator" securePagesWithPragma="false" /> <Valve className="org.apache.catalina.authenticator.NonLoginAuthenticator" securePagesWithPragma="false" /> 

可能是你正在寻找的是:

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中的应用程序caching文件夹。

我知道的唯一参数是在<Valve>元素上的disableProxyCaching 。 看到这里 。