我正在使用Spring 3.1作为我的webapp。我试图阻止一个JSP被缓存在用户的浏览器中,以防止它们通过后退按钮到达它。
我很幸运在打印出HTML页面的Servlet中使用这些设置:
response.setHeader("Cache-control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "-1");
我无法让那些调用在控制器函数中工作(通常从重定向调用):
@RequestMapping(value = "/error")
public String error(HttpSession session,HttpServletResponse response, ModelMap model){
logger.debug("started");
response.setHeader("Cache-control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "-1");
String status_message = (String)session.getAttribute("status_message");
status_message = (status_message == null) ? "" : status_message.trim();
session.removeAttribute("status_message");
model.put("status_message",status_message);
return "error";
}
我也试过把这些调用放在我的JSP中(在头文件的include的上方和下方):
<%@ include file="header.jsp" %>
<%
response.setHeader("Cache-control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "-1");
%>
<!-- content -->
<%@ include file="footer.jsp" %>
我也尝试将调用放在每个JSP中包含的头文件中,尽管我只想要一个JSP没有存储....只是为了看看我是否可以使它工作。它不起作用:
<%@ page language = "java" session = "true" import = "java.util.*, java.text.*" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix = "f" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>Acme Customer Service</title>
<link rel = "StyleSheet" href = "../nsd/css/nsd.css" type = "text/css"/>
</head>
我也试过尝试在0和-1之间切换“Expires”设置。没有骰子。
关于如何在用户的浏览器中缓存单个JSP的任何想法?
非常感谢提前
史蒂夫
答案 0 :(得分:0)
每次都使url唯一:向url添加get参数以包含纪元秒或其他一些唯一字符串。
所以你最终得到的结果是:http://www.google.com?param1=val1&secs=2342314234
答案 1 :(得分:0)
您需要扩展org.springframework.web.servlet.handler.HandlerInterceptorAdapter,如果请求的uri与控制器的uri匹配,则在postHandle方法中添加标头。您还可以在控制器中的HttpServletRequest中设置一个属性,然后在拦截器中检查它。您还可以使用spring-mvc-util为给定的uri创建拦截器。