java - session 中登录网站的不同用户的 HashMap

标签 java collections hashmap

在我的 Web 应用程序中,我创建新的 Hashmap 并将其保存在第一个 Servlet 的 session 中,并在下一个 Servlet 中使用它。在下一个 servlet 中,我将对 map 值执行一些 Java 脚本函数,从而更新 map 并再次将更新后的 map 放入 session 中。最后,我在 jsp 中显示新值并提交,这将更新服务器中的新值,并且将会出现感谢页面。

此处注意:这是一个基于用户的应用程序,因此每个用户都会登录,并且会创建一个新的 hasmap 并存储特定于该用户的值。我将其放入 session 中,该 session 将在应用程序中进一步使用。我正在使用 session.setattribute("map",mapobject) 和 session.getattribute("map")。

所以我的问题是:

  1. 此 map 需要同步吗?请注意,当用户登录时,我正在创建一个新的 HashMap 对象。

  2. session 方法看起来不错吗?我正在 session.setAttribute("map",mapobject) 中设置 map ...因此,如果多个用户同时登录,这将为他们工作并将特定值存储在 session “ map ”中,否则会产生一些冲突与其他用户 session 。

最佳答案

  1. 如果单个用户可以同时发出多个请求,则 map 可能仍需要同步:浏览器通常会同时向给定域发出最多 4 个并发请求。这可能(AJAX 请求)或可能不会(可能是图像)对您的应用程序产生有意义的影响。但如果它真的发生了,你可能会得到一个令人讨厌的惊喜。

  2. 不要将 map 放入 session 中,因为 session 基本上就是一个 map ,您可以将一堆条目放入其中。这可能有助于解决第一点,因为对 session 的访问可能已经同步。

  3. 请注意,如果您更改此应用程序以使其托管在多台计算机上,那么您现在必须担心 session 复制和/或粘性 session 。这就是为什么我通常建议尽可能不要使用 session (而是将数据保存在数据库中)......但解决方案可能超出了这个问题的范围。

关于java - session 中登录网站的不同用户的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22912066/

相关文章:

java - 在 Java 中用模 X 实现算术

Java 任务 setOnSucceded 不起作用

java - 如何删除非数字?

java - 将java控制台输出复制到Excel中,行而不是列

java - 如何比较两个具有多个值的键的映射?

c++ - 更改一个对象的引用并且它会更改集合中的所有对象

Java - 从旧列表创建新列表,旧列表也被修改

Java:HashMap<String,String> 存储与键和值相同的值。

java - 如何安全地同时修改 Java HashMaps 中的值?

java - 如何使用 Lambda 表达式过滤两个 map 并制作第三个 map java 8