【问题标题】:Vaadin Session Management - How does it work?Vaadin 会话管理 - 它是如何工作的?
【发布时间】:2018-01-08 10:45:45
【问题描述】:

在工作中,我们使用 Vaadin 开发了一个 Web 应用程序。我是一个非常高级的 Java 程序员。我对 Vaadin 也很有经验。但是现在我已经到了需要将信息存储在用户会话中的地步。诸如区域设置、用户名等属性。

Vaadin Documentation 中,他们谈论的是两种不同类型的会话,但我并没有真正理解其中的区别:

  • VaadinServletService 或 VaadinPortletService 被描述为用于处理请求的低级自定义层。
  • VaadinSession 使用 getSession() 作为低级会话对象的 UI。

当我想在整个 UI 独立用户会话期间存储属性时,有什么区别以及使用哪一个?

【问题讨论】:

  • 我认为VaadinSession 是您所需要的。它对应一个用户。每个VaadinSession 可以关联多个UI(例如多个浏览器选项卡)。
  • @SteffenHarbich 感谢您的提示 Steffen。它很奇怪,但与此同时,我们使用 VaadinServletService 实现了它,并且一切正常。我无法解释为什么。
  • 请谨慎输入(大小写、标点符号)。这个网站更像是维基百科,而不是一个随便的聊天网站。
  • 您使用的是 Vaadin 8 吗?你这样标记它。我建议在您的问题正文中也添加一个提及,因为 Vaadin 8 和更高版本之间存在巨大差异。
  • 相关问题页面:Register session to User

标签: java web-services session vaadin vaadin8


【解决方案1】:

如果在 Vaadin 8 中,您有简单的范围层次结构,分为三个级别。

  • ServletContext
    代表您的整个 Vaadin Web 应用程序。
  • VaadinSession
    代表每个用户的工作会话。
  • UI
    代表会话中的每个 Web 浏览器/标签(Vaadin 支持多窗口应用程序,非常棒)。

第一个是每个Java Servlet 的标准部分,在规范中定义。

第二个是会话的包装器,也在 Java Servlet 规范中定义。

Vaadin 实际上是一个巨大的 Servlet,所以它承载了上下文和会话的这些特性。

UI 类是 Vaadin 独有的。它表示 Web 浏览器窗口/选项卡的内容。 Vaadin 支持多窗口应用程序,跟踪所有打开的窗口/选项卡作为会话的一部分,这是 Vaadin 的一个非常好的功能。

要存储全州范围的应用程序,请使用标准 ServletContext 对象。它带有一个称为“属性”的键值集合。 key 为String 类型,value 为Object 类型。调用方法setAttributegetAttributeremoveAttribute。将此集合用于您的任何用户可能需要访问的任何对象,访问他们的会话。您可以顺便了解一下ServletContextListener,以挂钩到您的网络应用程序的启动和退出。

VaadinSession 类携带相同类型的键值对集合,具有相似的“属性”方法。使用它来跟踪整个用户工作会话中的项目,在它们之间可能会打开/关闭应用程序的多个窗口/选项卡。例如,在会话中,您将存储用户的 Spirit Animal 选择、他们的头像图像以及该人已通过用户名/密码凭据进行身份验证的事实。请参阅手册中的此页面,Setting and reading session attributes

如果您想存储每个窗口的设置,例如他们选择的背景颜色或浅色/深色模式,请在 UI 上存储一些内容。不幸的是,该类没有我所知道的方便的键值存储。因此,您需要将您自己的Map 或其他一些成员变量添加到您的UI 子类中。

有关详细信息,请参阅my Answer 以了解类似问题。我在那里做了一些漂亮的图表。这个问题是关于 Vaadin 7 的,但我隐约记得,这些概念在 7 和 8 之间延续。

至于VaadinServiceVaadinServletService,我一直没有完全理解它们的作用。它们似乎在运行时代表了整个 Vaadin 网络的各个方面。但两者都没有像VaadinSession 这样方便的键值集合。 (如果您使用 Vaadin Flow,版本 10+,请参阅 VaadinContext,该类不代表您的整个 Web 应用程序,并且确实带有方便的“属性”键值集合。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多