我想在google应用引擎网站上禁用JSP文件的缓存。
我有这个:
<%
// Set to expire far in the past.
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
%>
但是JSP仍然在缓存中。我需要终止用户会话并再次登录才能重新加载JSP代码。
如何禁用应用引擎JSP的缓存?
答案 0 :(得分:3)
此时可能太晚更改响应标头。他们将被忽略。您可以在HTTP调试器工具中验证响应标头的存在,例如Firebug。
在JSP中,您需要确保在提交响应之前将它们设置为(即所有标头都已发送;之后您无法发送另一个标头)。即确保它们位于JSP文件的最顶层,并且在 scriptlet 之前没有模板文本。模板文本可能会导致响应的提交。但是,通常的做法是使用Filter
。
实施javax.servlet.Filter
,其中doFilter()
方法如下所示:
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache", "no-store", "must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);
在web.xml
的{{1}} url-pattern
上将其映射到*.jsp
,这应该可行。