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

2024-01-07

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

In the Vaadin 文档 https://vaadin.com/docs/framework/application/application-lifecycle.html他们正在谈论两种不同类型的会议,但我并没有真正理解其中的区别:

  • VaadinServlet服务 https://vaadin.com/api/com/vaadin/server/VaadinServletService.html或 VaadinPortletService 被描述为用于处理请求的低级定制层。
  • Vaadin会话 https://vaadin.com/api/com/vaadin/server/VaadinSession.html使用 getSession() 作为较低级别会话对象的 UI。

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


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

  • Servlet上下文 https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletContext.html
    代表您的整个 Vaadin Web 应用程序。
  • VaadinSession https://vaadin.com/api/framework/8.8.6/com/vaadin/server/VaadinSession.html
    代表每个用户的工作会话。
  • UI https://vaadin.com/api/framework/8.8.6/com/vaadin/ui/AbstractComponent.html#getCustomAttributes--
    代表会话中的每个网络浏览器/选项卡(Vaadin 支持多窗口应用程序,非常棒)。

第一个是每个的标准部分Java小服务程序 https://en.wikipedia.org/wiki/Java_servlet,在规范中定义。

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

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

The UI https://vaadin.com/api/framework/8.8.6/com/vaadin/ui/UI.html类是 Vaadin 独有的。它代表 Web 浏览器窗口/选项卡的内容。 Vaadin 支持多窗口应用程序,跟踪所有打开的窗口/选项卡作为会话的一部分,这是 Vaadin 的一个非常好的功能。

要存储全州范围的应用程序,请使用标准ServletContext目的。它带有一个称为“属性”的键值集合。关键在于String类型,值为Object https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html类型。调用方法setAttribute, getAttribute, and removeAttribute。将此集合用于您可能需要为任何用户访问的任何对象,访问他们的会话。您可能会了解ServletContextListener https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletRequestListener.html顺便说一句,挂钩您的网络应用程序的启动和退出。

The VaadinSession类携带相同类型的键值集合,具有类似的“属性”方法。使用它来跟踪用户整个工作会话中的项目,包括可能打开/关闭应用程序的多个窗口/选项卡的项目。例如,在会话中,您将存储用户的 Spirit Animal 选择、他们的头像图像以及该人已通过用户名/密码凭据进行身份验证的事实。请参阅手册中的此页,设置和读取会话属性 https://vaadin.com/docs/v8/framework/articles/SettingAndReadingSessionAttributes.html.

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

欲了解更多信息,请参阅我的答案 https://stackoverflow.com/a/25586487/642706类似的问题。我在那里做了一些漂亮的图表。这个问题是关于 Vaadin 7 的,但我依稀记得,这些概念在 7 和 8 之间都有延续。

As for VaadinService https://vaadin.com/api/framework/8.8.6/com/vaadin/server/VaadinService.html and VaadinServletService https://vaadin.com/api/framework/8.8.6/com/vaadin/server/VaadinServlet.html,我一直没有确切地理解他们的角色。它们似乎代表了整个 Vaadin 网络在运行时的各个方面。但两者都没有像这样提供方便的键值集合VaadinSession。 (如果您使用 Vaadin Flow 版本 10+,请参阅VaadinContext,一个类代表您的整个网络应用程序,并且确实带有方便的“属性”键值集合。)

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

Vaadin 会话管理 - 它是如何工作的? 的相关文章

  • 最终字段可能尚未/已经初始化[重复]

    这个问题在这里已经有答案了 可能的重复 如何处理抛出检查异常的静态最终字段初始值设定项 https stackoverflow com questions 1866770 how to handle a static final field
  • HttpSession 内的同步是否可行?

    UPDATE 问题后立即解决 问题 通常 同步是在 JVM 内序列化并行请求 例如 private static final Object LOCK new Object public void doSomething synchroniz
  • Spring @Validated 在服务层

    Hej 我想使用 Validated group Foo class 在执行方法之前验证参数的注释 如下所示 public void doFoo Foo Validated groups Foo class foo 当我将此方法放入 Spr
  • 如果主引用指向 null,WeakReference 或 SoftReference 有何不同

    我正在读关于WeakReference https docs oracle com javase 10 docs api java lang ref WeakReference html and SoftReference https do
  • 我应该使用 JDBC getNString() 而不是 getString() 吗?

    我们正在构建一个由 Oracle 数据库支持的 Java 应用程序 我们使用 JDBC 驱动程序 访问该数据库ojdbc6 jar and orai18n jar 数据库模式主要使用以下方式存储文本列NVARCHAR2数据类型 The JD
  • AWS SDK 2 承担角色

    Bean public DynamoDbClient amazonDynamoDB final AssumeRoleRequest assumeRoleRequest AssumeRoleRequest builder roleSessio
  • 在 Java 中的 JFrame/JPanel/JComponent 中添加 Web 浏览器

    我正在开发一个 Java 应用程序 需要在应用程序中使用 Web 浏览器 我见过一些应用程序这样做 例如在同一应用程序中单击左侧面板中的提要并打开右侧面板中的链接时的 RSS 阅读器 我想实现类似的功能 在java中可以做到这一点吗 Jav
  • 使用java在网页中进行字符编码

    如何使用java找出网页中的字符编码类型 打开与 URL 的连接 使用URL openConnection http download oracle com javase 6 docs api java net URL html openC
  • java数学中的组合“N选择R”?

    java库中是否有内置方法可以为任何N R计算 N选择R 公式 实际上很容易计算N choose K甚至不需要计算阶乘 我们知道 公式为 N choose K is N N K K 因此 公式为 N choose K 1 is N N N
  • 如何构建和使用 TimeSeriesCollections

    我想在图表的 X 轴上显示一些日期 并且here https stackoverflow com questions 5118684 jfreechart histogram with dates据说我必须使用 TimeSeriesColl
  • Hazelcast:连接到远程集群

    我们有一组 Hazelcast 节点 全部运行在一个远程系统 具有许多节点的单个物理系统 上 我们希望从外部客户端连接到该集群 一个 Java 应用程序 它使用如下代码连接到 Hazelcast ClientConfig clientCon
  • JPA 的 Hibernate 查询提示

    我一直在尝试为所有可以通过设置的提示找到一个明确的资源Query setHint String Object JPA 中的方法调用 但我一无所获 有人知道一个好的参考吗 See 3 4 1 7 查询提示 http docs jboss or
  • 按名称获取 ArrayList

    这是正确的获取方式吗ArrayList
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java8 项目上的 SonarQube 给出 jacoco-Exception

    我刚刚下载了最新版本 SonarQube 4 3 然后尝试使用以下命令构建 java 8 项目 mvn clean install mvn sonar sonar 这给了我下面的例外 谷歌搜索 我的印象是这是一个早期的问题 应该已经解决 h
  • 如何从 Trie 中检索给定长度的随机单词

    我有一个简单的 Trie 用来存储大约 80k 长度为 2 15 的单词 它非常适合检查字符串是否是单词 但是 现在我需要一种获取给定长度的随机单词的方法 换句话说 我需要 getRandomWord 5 来返回 5 个字母的单词 所有 5
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell

随机推荐

  • Java RMI 和同步方法

    我正在研究 分布式系统 Tanenbaum 和 Van Steen 所著 一书 他们所说的内容似乎与许多人对 Java RMI 和同步方法的看法相冲突 我的想法是使用同步方法在远程对象实现 因此在服务器上运行的实际实现 上 即使对该方法的调
  • EF6 使用命令树拦截器禁用查询计划缓存

    我在用着IDbCommandTreeInterceptor实现软删除功能 内部标准TreeCreated方法我检查给定的查询命令是否包含具有软删除属性的模型 如果他们这样做并且用户也请求获取软删除对象 我用以下命令调用我的软删除访问者que
  • 检测 Tomcat 中领域身份验证失败的原因

    我为 Tomcat 7 编写了一个自定义 Realm 我将其包装在 Tomcat 默认安装提供的锁定 Realm 中 锁定功能工作正常 但在我的 web xml 中 我有
  • 为什么我会收到源工具包服务终止错误? [复制]

    这个问题在这里已经有答案了 第二行有问题 什么 let modelURL NSBundle mainBundle URLForResource xxx withExtension momd let managedObjectModel NS
  • UITableView 重复 Firebase 数据

    我从 Firebase 收到重复的内容 但我似乎无法弄清楚我做错了什么 在 firebase 我有 6 个帖子 表格视图填充了 6 个单元格 但所有 6 个单元格都具有相同的数据 而其他 5 个帖子不存在 UITableViewCell t
  • 将键值列表转换为数据框

    我在 R 中有一个名为 国家 的键 值列表 print country CAM 1 5 TJK 1 1 SEN 1 7 键是一个国家的名称和该国家出现的值 我想将此列表转换为数据框 如下所示 country occurence 0 CAM
  • 为 Django Oscar 存储信用/虚拟货币应用程序?

    我希望为存储虚拟货币的客户建立一个商店信用模型 此商店信用应用程序将存储可用于支付产品费用的积分 在退货或某些方案中添加 是django oscar 账户 https github com django oscar django oscar
  • Delphi7 WCF方法输入参数

    我有 wcf web 服务 basicHttpBinding 我们的Delphi7客户端无法正确使用它 我已经使用 WCF 附加功能简化了 WSDL 好的 Delphi7 wsdl 导入器生成代理正确 现在我遇到了输入参数的问题 它们总是有
  • HTTP 404 与 Ajax.ActionLink

    我无法解决 404 错误 Global asax cs 中的默认路由 routes MapRoute Default controller action id new controller Home action Index id UrlP
  • SQL 或 LINQ:如何选择仅一个参数发生变化的记录?

    假设我们有这个列表 Id IdRef myColumn anotherColumn 448 70 1 228 449 70 1 2s8 451 70 1 228 455 70 2 2a8 456 70 2 s28 457 70 2 28 4
  • 匹配嵌套大括号的正则表达式

    我需要正则表达式来匹配正确的大括号 例如每个开一闭一abc abc bc xyz 我需要它 从中获取一切 abc bc xyz 没有得到 abc bc 我尝试使用 这对于正则表达式来说是不可能的 为此需要上下文无关语法 并且正则表达式仅适用
  • 检测图像是否像素化的最佳方法是什么?

    我试图判断图像是否像素化 我试图使用拉普拉斯方差方法来执行此操作 但我不确定它是否正常工作 因为使用我的代码返回的图像非常扭曲 像素化 方差非常高 为 1011 import sys import cv2 import imutils as
  • 比较列表中除您自己之外的项目

    我想比较列表中的项目 但不希望将其与其自身进行比较 我怎么做 我的代码 var students new List
  • 缺少对 verify(mock) 的方法调用,但有一个吗?

    介绍 我正在尝试进行一个测试来验证 使用 Mockito v1 9 5 的verify 一个带有签名的方法deinit 在界面中Bar在执行传递后调用Foo deinit 我遇到了一个我真的不明白的错误 这是FooTest java我正在尝
  • 在分支中应用补丁

    我收到了来自贡献者的补丁 显然 他在后备箱中制作了补丁 但是 我想将他的更改提交到一个新分支 我可以知道如何通过 Tortoise Hg 做到这一点吗 下面的说明假设您希望将补丁隔离在named branch 使用命令行 可以轻松地将补丁应
  • JAX-RS访问控制

    有人可以为我提供一些有关 JAX R Web 服务中的访问控制的指示吗 例如根据用户凭据 名称或任何其他标准限制访问 在sun手册中找不到任何有用的信息 提前致谢 阿迪尔 我个人使用 Spring security 来完成此任务 Sprin
  • 覆盖 Python cmd 模块中未记录的帮助区域

    我正在使用 Python 的 cmd 模块构建一个小型 CLI 工具 我不喜欢显示列出的未记录的命令 因此 当我输入 帮助 时 我只想显示记录的命令 当前输入帮助显示 Documented commands type help
  • 使用 LINQ 过滤集合

    假设我们有一个 Person 对象的集合 class Person public string PersonName get set public string PersonAddress get set 以及代码定义集合中的某处 List
  • 从命令行使用 git 属性

    我的仓库中有这样的配置 echo java diff java gt gt gitattributes 当我这样做时git diff 我得到了预期的结果 不过 我正在编写一个脚本来分析其他 git 存储库 所以我通常会这样做 git git
  • Vaadin 会话管理 - 它是如何工作的?

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