在jsp中的IE Back Button问题

时间:2010-01-15 15:58:08

标签: java jsp

我在test1.jsp上有2个jsp页面test1.jsp和test2.jsp我发布了一些数据,它将重定向到test2.jsp。但是从test2.jsp,如果我点击了浏览器后退按钮然后显示网页已过期页面,那么如何继续在后退按钮点击时显示test1.jsp?我在IE浏览器中遇到此问题。

2 个答案:

答案 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模式。