Vaadin 会话管理 - 它是如何工作的?



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

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

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

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

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

  • ServletContext
    表示整个 Vaadin Web 应用程序。
  • VaadinSession
    表示每个用户的工作会话。
  • UI
    表示会话中的每个Web浏览器/选项卡(Vaadin支持多窗口应用程序,非常惊人)。

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

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

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

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

若要存储状态范围的应用,请使用标准ServletContext对象。它带有一个称为"属性"的键值集合。键为String类型,值为Object类型。调用方法setAttributegetAttributeremoveAttribute。将此集合用于可能需要为任何用户访问的任何对象,并访问其会话。顺便了解ServletContextListener,挂接到您的 Web 应用程序启动和退出。

VaadinSession类携带相同类型的键值集合,具有类似的"属性"方法。使用它来跟踪用户工作会话中的项目,跨这些项目可能会打开/并列应用的多个窗口/选项卡。例如,在会话中,您将存储用户的灵兽选择、他们的头像图像以及该人已通过用户名/密码凭据进行身份验证的事实。 请参阅手册设置和读取会话属性中的此页面。

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

有关更多信息,请参阅我对类似问题的回答。我在那里做了一些漂亮的图表。这个问题是关于Vaadin 7的,但我依稀记得,这些概念在7和8之间延续。

至于VaadinServiceVaadinServletService,我从来不了解他们的角色。它们似乎在运行时代表了整个Vaadin Web的各个方面。但两者都不像VaadinSession那样携带方便的键值集合。(如果您使用 Vaadin Flow 版本 10+,请参阅VaadinContext,一个表示整个 Web 应用程序的类,并且确实带有方便的"属性"键值集合。

相关内容

  • 没有找到相关文章

最新更新