Java Servlet向自己转发的网页在浏览器后退/前进按钮上的行为不正确

时间:2014-10-01 04:52:01

标签: java jsp servlets

我尝试设计一个讨论论坛,但似乎有一点问题。对于我的例子,我的论坛的结构是topicsPage.jsp包含一堆主题,而replyPage.jsp包含一堆回复,textArea允许人们回复该主题。现在我遇到了一个问题,如果用户发布了回复,他想回到topicPage.jsp,他点击浏览器的后退按钮,浏览器没有去topicPage.jsp,而不是那样做,浏览器仍然留在replyPage.jsp与用户提交回复之前的状态。

我相信这不是唯一会导致这个问题的情况,任何需要servlet转发到原始网页的情况都会出现这个问题。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我的建议最好是监控jsp中的会话,看起来像这样

if (session == null || session.getAttribute("username") == null) {
        response.sendRedirect("yourDesiredpage.jsp"); // No logged-in user found, so redirect to login page.
    } else {
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        response.setDateHeader("Expires", 0);
        chain.doFilter(req, res);  
    }

希望这有助于你

答案 1 :(得分:1)

作为一般规则,您应该在提交后始终执行重定向而不是转发(post)。它避免了浏览器后退按钮的许多问题。这称为post - redirect - pattern