我正在尝试将 Tomcat 7 的
Cache Control
设置为 no-cache
选项。
我尝试在我的
ExpiresFilter
中使用web.xml
,如下所示:
<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 0 seconds</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/css</param-name>
<param-value>access plus 0 seconds</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType application/javascript</param-name>
<param-value>access plus 0 seconds</param-value>
</init-param>
<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>
但是,当我阅读响应头时,我得到的只是:
Cache-Control:max-age=0
而不是
Cache-Control: no-cache
。
如何设置我的 Tomcat 服务器仅通过配置文件指定
Cache-Control: no-cache
?
为了设置“Cache-Control: no-cache”,您必须创建一个自定义过滤器,ExpiresFilter 用于根据 HTTP 响应的响应添加“Expires”和“Cache-Control: max-age=”标头“Content-Type”并且无助于设置“no-cache”
请按照以下步骤操作
应编写自定义过滤器以设置标头,将过滤器打包在.jar中
将.jar放入$CATALINA_HOME/lib
在 $CATALINA_HOME/lib 中添加 jar 后,验证是否没有“ClassNotFoundException”
package nocache;
import javax.servlet.Filter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
public class CacheFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setHeader("Cache-Control", "no-cache");
filterChain.doFilter(servletRequest, response);
}
}
示例 web.xml 部署描述符片段
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>nocache.CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>