Browser 最佳实践:如何处理浏览器和网站导航的并发性

Browser 最佳实践:如何处理浏览器和网站导航的并发性,browser,navigation,struts,Browser,Navigation,Struts,这是每个web开发人员都知道的问题。就我试图为这个问题找到一个好的解决方案而言,根本没有(或者至少我找不到) 让我们假设如下: 用户的行为不像预期的那样。我正在从事的实际项目使用web门户内的导航。但如果用户使用浏览器的“后退”按钮,整个事情就会变得很危险[?],而且结果并不总是可以预测的 我们使用了struts框架,并将后url存储到表单中——在某些地方,我们需要一个后url——这已经从表单的后url中呈现出来。因为该信息只有一个字段,因此不可能返回多个步骤 更改“struts流”(可能导致使

这是每个web开发人员都知道的问题。就我试图为这个问题找到一个好的解决方案而言,根本没有(或者至少我找不到)

让我们假设如下: 用户的行为不像预期的那样。我正在从事的实际项目使用web门户内的导航。但如果用户使用浏览器的“后退”按钮,整个事情就会变得很危险[?],而且结果并不总是可以预测的

我们使用了struts框架,并将后url存储到表单中——在某些地方,我们需要一个后url——这已经从表单的后url中呈现出来。因为该信息只有一个字段,因此不可能返回多个步骤

更改“struts流”(可能导致使用不同的表单)时,此信息将丢失

如果用户胆敢在您的Web应用程序中的某个位置放置书签,则此信息可能从未设置过,结果将再次不可预测或不够灵活

我的“解决方案”

我将用户访问的每一个导航相关页面都存储到堆栈中,就像存储到会话中一样。这意味着将收集并存储导航路径以供以后导航

在webapp中涉及后台导航的任何页面上,我都使用了一个自制的标记,将堆栈内容呈现到url中

就是这样。 单击此back url时,堆栈中已填充了用户单击的back url中的内容(呈现back链接后,它将保存堆栈中的所有信息)

这是非常清楚的,因为点击链接是一种清晰的状态,web开发人员此时确切地知道用户“是”在哪里,这与用户之前所做的任何事情完全无关(例如多次点击浏览器后退按钮)。然后在这个新状态上构建导航堆栈

简历: 很明显,这不是最好的解决方案。但是它允许在堆栈上存储额外的信息,比如页面参数和一些其他有用的东西(进一步的开发是可能的)

那么,您对这个问题的解决方案是什么?

干杯


mana

堆栈解决方案听起来很有趣,但如果用户选择在不同选项卡上“并行”导航或使用书签,它可能会崩溃

恐怕我真的不明白为什么必须为每个用户保留所有这些状态:理想情况下,web应该遵循规则,并且完全无状态。因此,单个URL应该标识单个资源,而不必保留每个用户的导航历史记录

如果您的web应用程序严重依赖AJAX,您可以尝试实现GMail之类的东西(不可否认,不是那么容易…),其中界面的每一个更改都会反映在页面URL的更改中。因此,每个页面都由当前URL标识,用户可以同时导航或像往常一样使用后退按钮