在工作中我们使用vaadin开发Web应用程序。我是一个非常高级的Java程序员。我也经历过vaadin。但现在我已经到了需要在用户会话中存储信息的地步。属性如Locale,Username等。在Vaadin Documentation他们谈论的是两种不同类型的会议,但我真的没有区别:
在整个独立于用户的用户会话期间,当我想要这样的商店属性时,有什么区别和使用?
感谢提前澄清!
答案 0 :(得分:1)
如果在Vaadin 8中,您具有三个简单的范围层次结构。
VaadinSession
UI
第一个是规范中定义的每个Java Servlet的标准部分。
第二个是会话的包装,也由Java Servlet规范定义。
Vaadin实际上是一个巨大的Servlet,因此它具有上下文和会话的这些功能。
UI
类是Vaadin独有的。它表示Web浏览器窗口/选项卡的内容。 Vaadin支持多窗口应用程序,作为会话的一部分跟踪所有打开的窗口/选项卡,这是Vaadin的一个非常不错的功能。
要存储州级应用,请使用标准的ServletContext
对象。它带有一个称为“属性”的键值集合。密钥是String
类型,而值是Object
类型。调用方法setAttribute
,getAttribute
和removeAttribute
。将此集合用于您可能需要为任何用户访问的任何对象,以使他们的会话更有意义。您可以顺便了解ServletContextListener
,以了解Web应用程序的启动和退出。
VaadinSession
类具有相同的键值集合,并具有类似的“属性”方法。使用此功能可以跟踪用户整个工作过程中的项目,跨项目可能会打开/关闭应用程序的多个窗口/标签。例如,在会话中,您将存储用户的“精神动物”选择,他们的头像图像以及通过用户名/密码凭据对人进行身份验证的事实。请参见手册Setting and reading session attributes中的此页。
如果要存储每个窗口的设置,例如选择背景色或明/暗模式,请在UI
上存储。不幸的是,该类没有附带我所知道的便利的键值存储。因此,您需要将自己的Map
或其他一些成员变量添加到您的UI
子类中。
有关更多信息,请参见my Answer到类似的问题。我在那里做了一些漂亮的图表。这个问题是关于Vaadin 7的,但是我隐约记得,这些概念在7到8之间延续。
对于VaadinService
和VaadinServletService
,我从未确切地了解过它们的作用。它们似乎代表了整个Vaadin Web运行时的各个方面。但是它们都没有像VaadinSession
那样方便的键值集合。 (如果您使用的是Vaadin Flow版本10+,请参阅VaadinContext
,该类不代表您的整个Web应用,并且确实包含方便的“属性”键值集合。)