我在test1.jsp上有2个jsp页面test1.jsp和test2.jsp我发布了一些数据,它将重定向到test2.jsp。但是从test2.jsp,如果我点击了浏览器后退按钮然后显示网页已过期页面,那么如何继续在后退按钮点击时显示test1.jsp?我在IE浏览器中遇到此问题。
答案 0 :(得分:2)
因此,您实际上并未重定向请求,而只是POST
(并转发)请求。每当您尝试从浏览器历史记录中获取非缓存的POST
请求时,您将获得此错误页面。
您需要在 这样,POST
之后实际 重定向请求。这称为POST-Redirect-GET pattern。假设您的Web应用程序设计合理,并且您使用Servlet
来控制,预处理和后处理请求,那么您需要做的就是调用HttpServletResponse#sendRedirect()
而不是RequestDispatcher#forward()
:< / p>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Postprocess request parameters here.
// Finally redirect POST request to a brand new GET request.
response.sendRedirect("result.jsp");
}
POST
请求将不会在浏览器历史记录中获取。按下后退按钮将不再获得POST
请求,但是在
唯一需要注意的是,初始请求(包括其所有参数和属性)也会消失,因此您无法在结果页面中使用它们。如有必要,您可以使用会话范围或重定向URL中的查询字符串/路径信息来解决此问题。
这个特殊的“问题”不是MSIE特有的。其他浏览器的行为相同,但它们只会提供一些不同的错误/警告消息。将来,在明确指出MSIE为根本原因之前,请使用不同的浏览器进行测试。
答案 1 :(得分:1)
查看Redirect After Post模式。