代码之家  ›  专栏  ›  技术社区  ›  Omar Kooheji

在Web应用程序中从页面刷新恢复?

  •  1
  • Omar Kooheji  · 技术社区  · 15 年前

    在Ajax Web应用程序中,是否有一种从页面刷新中恢复的标准或公认的方法?

    我现在的兴趣主要在于一个带有Java(JSP/Servlet)后端的Web应用程序。我的页面最初是从一个JSP呈现的,然后用户使用JavaScript事件在界面中前进。

    是否有一个设计模式涵盖了这一点,我假设刷新按钮是Web开发人员经常需要担心的,所以应该有一种从中恢复的方法,同时保持状态。

    3 回复  |  直到 15 年前
        1
  •  4
  •   aleemb    15 年前

    有很多方法可以解决这个问题。

    • -这就是Gmail的作用 #inbox/123 这意味着它应该显示电子邮件ID 123 标签收件箱。这不是很有表现力,对于简单的状态很有用。但是,它确实为用户提供了为页面添加书签并使用浏览浏览器历史记录的功能。
    • 曲奇饼 -这样做的好处是,可以完全在客户机端进行管理。您可以通过javascript设置cookie并通过javascript恢复它们。它很便宜,不需要,也不需要寄回去。状态信息通常不需要在服务器上持久化,因为通常状态是临时的。
    • 会议 -这需要您在客户端更新页面时通过Ajax将状态信息发回服务器。如果客户机刷新页面,则新页面将更改后的状态合并到新呈现的页面中。这在性能上是相当昂贵的,同时也使设计复杂化,但对某些应用程序可能有用。
        2
  •  2
  •   GEOCHET S.Lott    15 年前

    我的建议是在服务器端为每个用户保留一个状态机,它通过Ajax调用更改状态。这样,在刷新时,您就已经知道用户处于哪个状态位置,允许您从中恢复。

    如果在编码时不小心,这可能会给您带来可伸缩性问题。

    另一个解决方案可能是将状态变量存储在cookie中(假设用户有活动的cookie)。在页面加载时,状态变量将提交到Web应用程序,允许您进行恢复。

        3
  •  1
  •   Tamas Czinege    15 年前

    以下是我们在项目中使用的一个解决方案:

    1. 您可以在用户访问页面时为页面分配序列号/随机GUID。您可以将其放入URL的get部分(例如yourpage.jsp)?pid=1337,其中1337是页面视图序列号)

    2. 处理Ajax请求时,在会话的服务器端维护页面状态的“镜像”,或者在JSP中使用任何机制来存储状态。

    3. 当用户请求页面时,您检查给定的序列号是否已经存在,如果存在,则意味着它是一个刷新,因此使用会话中的镜像数据呈现页面。

    推荐文章