如何存储单个浏览器选项卡/窗口的状态?

2024-04-01

我正在开发一个单页 jQuery 和 Backbone.js Web 应用程序。后端是 JBoss 6 应用程序服务器。

到目前为止,我们的结构如下:

  • 只有一个servlet(前端控制器)。来自 JavaScript 客户端的每个请求都会经过这里。
  • 在 servlet 中——在某个 JS 客户端的第一个请求时——我查看一个有状态会话 bean。对于该客户端的下一个请求,我将查找结果存储在 HTTP 会话容器中。所以每个 JS 客户端都只有一个有状态会话 bean。此连接由会话 cookie 保存。

现在我还有一个额外的要求:

当用户有两个浏览器选项卡(在一个浏览器中)时,他们应该在每个浏览器选项卡中拥有两个独立的 Web 应用程序实例。因此,我对会话 cookie 有疑问,因为此会话 cookie 适用于所有浏览器选项卡。

我必须改变结构,以便:

  • Servlet 必须为某个 JS 客户端的第一个请求生成一个新的会话 ID。该会话 ID 被传送给客户端。
  • 每次向后端 POST 时,JS 客户端都必须发送此会话 ID。

我的问题是:

到目前为止,我将查找结果保存在 HTTP Session 对象中,并且没有考虑生成会话 ID。但现在我必须把它存储在其他地方,在哪里?

有没有人有这种设置的经验并可以帮助我?

Update:
感谢 BalusC 提供的这种非常有趣的方法。
当我很好地理解你时,这意味着:

选项卡的所有单独 JS 客户端one浏览器共享一个 HTTP 会话对象。在这个 HTTP 会话对象中,每个选项卡都有自己的入口点。听起来确实不错。所以我仍然可以使用整个 HTTP 会话基础设施,而不必重新发明轮子。


在初始 GET 请求上自动生成一个唯一值,您将其存储并在每个后续回发中作为隐藏输入值传递。使用此唯一值作为表示视图范围数据的会话属性的标识符。

在全新会话的第一个请求期间,执行以下操作:

Map<String, ViewData> viewScope = new HashMap<String, ViewData>();
session.setAttribute("viewScope", viewScope);

(the ViewData表示您想要在同一视图上的回发中跟踪的特定于视图的数据)

在每个 GET 请求期间,执行以下操作:

String viewDataId = UUID.randomUUID().toString();
viewScope.put(viewDataId, new ViewData());
request.setAttribute("viewDataId", viewDataId);

在生成 HTML 期间,执行以下操作:

<input type="hidden" name="viewDataId" value="${viewDataId}" />

在每个 POST 请求期间,执行以下操作:

ViewData viewData = viewScope.get(request.getParameter("viewDataId"));
// Get/set view-specific data in there.

确保 jQuery 也传递这个隐藏的输入(如果你已经正确使用的话,这不应该是一个大问题$(form).serialize()或例如用于 ajax 表单的 AjaxForm 插件)。

如果您熟悉 Java EE 的 MVC 框架JSF https://stackoverflow.com/tags/jsf/info,那么知道它的@ViewScoped注释的工作原理与上面描述的大致相同。另请参见 a.o.如何选择合适的bean范围? https://stackoverflow.com/questions/7031885/how-to-choose-the-right-bean-scope

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何存储单个浏览器选项卡/窗口的状态? 的相关文章

随机推荐

  • OpenXML 在写入元素时挂起

    我有一个程序 它基本上从数据库中提取数据 将其缓存到文件中 然后将该数据导出为多种格式 Excel Excel 2003 CSV 我正在使用 OpenXML SDK 2 0 来完成 Excel 工作 这些导出过程并行运行 使用Paralle
  • 如何将世界上所有国家/城市/州放入我的数据库?

    我有一个困难的架构和网络问题 我正在尝试为世界上每个城市制作一个关于徒步旅行的页面http www comehike com http www comehike com 我必须以某种方式导入世界上所有的城市 并按州构建它们 而州又按国家构建
  • FILTER_VALIDATE_URL 是否过于严格?

    In PHP filter var www example com FILTER VALIDATE URL 回报false 它是否正确 不是www example com有效的 URL 或协议 http ftp 等 需要在 URL 中明确说
  • 将 C# 单元测试名称转换为英文(testdox 样式)

    我有一大堆用 MbUnit 编写的单元测试 我想从测试名称生成简单的英语句子 这里介绍一下这个概念 http dannorth net introducing bdd http dannorth net introducing bdd 这是
  • 基于类的vue组件的标签名称是什么

    参考下面的链接 我们可以使用用 TypeScript 编写的基于类的 vue 组件 使用这些自定义组件的正确方法是什么 例如 下面的 Es5 代码定义了一个可以在其他组件模板中使用的组件 例如
  • 带分组的 WPF DataGrid 虚拟化

    我正在使用来自 CodePlex 的 WPF DataGrid http wpf codeplex com 我需要让虚拟化与分组一起使用 This question https stackoverflow com questions 110
  • 获取页面事件、选项卡关闭、失去焦点?

    问题是如何在特定选项卡上查询此类事件 用户已加载具有特定 URL 的选项卡 例如 google com 我认为最简单的方法是使用 chrome tabs query 然后您可以获取带有 url 的活动选项卡 用户已关闭选项卡 该选项卡处于非
  • 是否有任何选项可以禁用开火服务器上的群聊消息历史记录?

    我一直在创造group chat application 在实现群聊功能时我面临问题 当我每次join the room open fire sends last two days messages 这是我每次加入房间时收到的帖子消息
  • 在页面加载时显示 AJAX 加载器

    你好 我对 javascript 很陌生 不知道如何使用它 我希望 AJAX 加载器在页面加载时出现 加载完成后我希望加载器消失 谁能给我发一个代码吗 通常 这是通过在内容顶部显示 隐藏一两个 div 来完成的 您可以从以下位置获取精美的加
  • Sharepoint 2013。使用 JavaScript 的多值查找字段

    有没有办法使用 JavaScript 客户端对象模型编辑多值查找字段 我需要删除一个或多个查找值 并最终添加一个或多个值 我到处搜索 我阅读MSDN文档 我也看看我的桌子底下 Thanks Multiple Column Lookup值表示
  • Flutter:在启​​动时执行函数 - 等待 HTTP 响应解析器提取图像 URL

    我正在开发一个 Flutter 应用程序 我需要从 API 获取几乎所有内容 包括图像 颜色 文本等 所以我应该做的是构建应用程序的主要结构 然后用 API 提供的信息填充所有内容 当应用程序开始获取响应并初始化变量以在应用程序中使用它们时
  • C# 和 C++ 类继承混合

    我有一堆有趣的程序集想要组合在一起 通用汇编 C 或 C CLI public class MyBase public void MethodA private void MethodB protected virtual MethodC
  • 使用 LINQ 从文件中读取文本数据

    我有以下文本文件 37 44 60 67 15 94 45 02 44 如何使用 LINQ 从此文件中读取所有数字并将它们保存到二维数组中 我所做的就是创建一个简单的数组 其中每行中包含所有第一个值 在这种情况下使用 LINQ 是个好主意还
  • 如何在 c 中的变量中仅存储文件的结束位

    我的代码如下 include
  • Google API key V2 RuntimeException [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我创建了一个示例 Android 应用程序 用于使用 google api key v2 访问 google 地图 当我
  • 在 Haskell 中如何将字符串列表相乘? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试编写一个函数 该函数接受字符串列表和 Int 并返回其中每个字符串都是 int 次的字符串列表 那是 duplicate S
  • Pandas - 根据行值生成唯一 ID

    我想为用户生成一个基于整数的唯一 ID 在我的 df 中 假设我有 index first last dob 0 peter jones 20000101 1 john doe 19870105 2 adam smith 19441212
  • 带 Java 客户端的键值数据库

    我基本上想在磁盘上存储一个哈希表 以便以后可以查询它 我的程序是用Java 编写的 哈希表从字符串映射到列表 那里有很多键值存储 但经过大量研究 阅读后 尚不清楚哪一个最适合我的目的 以下是一些对我来说很重要的事情 简单的键值存储 允许您使
  • 将带有各种分隔符的地址拆分为街道地址、城市、州、邮政编码和国家/地区

    我的数据在 Excel 中 我有几张数据 其中地址始终位于每张数据的同一列中 地址格式的示例包括 1155 15th Street NW Suite 600 华盛顿特区 20005 美国4600 Empire Blvd 200 达勒姆 NC
  • 如何存储单个浏览器选项卡/窗口的状态?

    我正在开发一个单页 jQuery 和 Backbone js Web 应用程序 后端是 JBoss 6 应用程序服务器 到目前为止 我们的结构如下 只有一个servlet 前端控制器 来自 JavaScript 客户端的每个请求都会经过这里