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

时间:2018-01-08 10:45:46

标签: java web-services session vaadin vaadin8

在工作中我们使用vaadin开发Web应用程序。我是一个非常高级的Java程序员。我也经历过vaadin。但现在我已经到了需要在用户会话中存储信息的地步。属性如Locale,Username等。在Vaadin Documentation他们谈论的是两种不同类型的会议,但我真的没有区别:

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

在整个独立于用户的用户会话期间,当我想要这样的商店属性时,有什么区别和使用?

感谢提前澄清!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

Vaadin实际上是一个巨大的Servlet,因此它具有上下文和会话的这些功能。

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

要存储州级应用,请使用标准的ServletContext对象。它带有一个称为“属性”的键值集合。密钥是String类型,而值是Object类型。调用方法setAttributegetAttributeremoveAttribute。将此集合用于您可能需要为任何用户访问的任何对象,以使他们的会话更有意义。您可以顺便了解ServletContextListener,以了解Web应用程序的启动和退出。

VaadinSession类具有相同的键值集合,并具有类似的“属性”方法。使用此功能可以跟踪用户整个工作过程中的项目,跨项目可能会打开/关闭应用程序的多个窗口/标签。例如,在会话中,您将存储用户的“精神动物”选择,他们的头像图像以及通过用户名/密码凭据对人进行身份验证的事实。请参见手册Setting and reading session attributes中的此页。

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

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

对于VaadinServiceVaadinServletService,我从未确切地了解过它们的作用。它们似乎代表了整个Vaadin Web运行时的各个方面。但是它们都没有像VaadinSession那样方便的键值集合。 (如果您使用的是Vaadin Flow版本10+,请参阅VaadinContext,该类不代表您的整个Web应用,并且确实包含方便的“属性”键值集合。)