我的jsp没有得到刷新

时间:2010-02-01 06:48:12

标签: java jsp

我有一个jsp页面,我将信息传递到第二页,我在第二页显示信息 使用从ist页面传递的信息。当我使用浏览器后退按钮时出现问题。如何使我的浏览器返回按钮以更新和刷新数据

3 个答案:

答案 0 :(得分:1)

唯一的方法是使用HttpSession - 因为数据在整个会话期间可用 - 结合后重定向 - 获取模式和禁用客户端缓存 - 所以后面按钮不会从浏览器历史记录/缓存中请求页面,而是从服务器请求一个全新的页面

以下是page1.jsp应该是什么样子的启动示例(请注意meta标题,这些是禁用浏览器缓存与浏览器缓存兼容的最小设置,您不应该更改它们任何方式):

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2175119</title>
        <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">
    </head>
    <body>
        <form action="page2" method="post">
            <input type="text" name="foo" value="${page1.foo}">
            <input type="text" name="bar" value="${page1.bar}">
            <input type="submit">
        </form>
    </body>
</html>

page2后面的servlet类中,您需要在Map<String, String>之类的数据结构中收集请求参数,或者通过HttpSession#setAttribute()将{{3}}放入会话中的完全Javabean类。 {1}}作为属性名称(以便您可以通过page1在JSP EL中访问它,如上所示):

${page1}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Map<String, String> page1params = new HashMap<String, String>(); page1params.put("foo", request.getParameter("foo")); page1params.put("bar", request.getParameter("bar")); request.getSession().setAttribute("page1", page1params); // Do remnant of your business logic here if necessary. // Now redirect to page2.jsp (else the back button won't work, // because the POST has been expired due to the meta headers). response.sendRedirect("page2.jsp"); } 中,您可以使用与page2.jsp中相同的JSP EL方式访问表单数据:

page1.jsp

如果按... <p>Entered value for "foo" is: ${page1.foo}</p> <p>Entered value for "bar" is: ${page1.bar}</p> ... 中的后退按钮,它会向服务器发送一个全新的page2.jsp请求,并从服务器检索GET,并预先填充会话中的数据。

这一点有一点需要注意:如果您在相同的会话中打开了多个浏览器窗口,则输入/更改的值将相互影响。只要您坚持使用浏览器后退按钮进行导航而不是page1.jsp中的真实表单按钮,这是不可解决的。

希望这有帮助。

答案 1 :(得分:0)

我不确定,但您可以尝试以下选项。

1)将表单数据存储在会话变量中并在下一页中保持upading。因此,当用户点击(页面加载将发生)按钮时,页面将加载会话变量的新数据。

2)http://www.servletsuite.com/servlets/backtag.htm

3)http://www.theserverside.com/discussions/thread.tss?thread_id=29853

答案 2 :(得分:0)

我认为问题的实质是:在用户按下“返回”后,如何让浏览器重新请求第一页,而不是显示页面的旧的临时缓存版本?

答案是使第1页的抓取结果不可缓存。这是通过HTTP响应头完成的,在JSP中设置这些头的快速而脏的方法是:

<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);
%>