在我的 Web 应用程序中,我创建新的 Hashmap 并将其保存在第一个 Servlet 的 session 中,并在下一个 Servlet 中使用它。在下一个 servlet 中,我将对 map 值执行一些 Java 脚本函数,从而更新 map 并再次将更新后的 map 放入 session 中。最后,我在 jsp 中显示新值并提交,这将更新服务器中的新值,并且将会出现感谢页面。
此处注意:这是一个基于用户的应用程序,因此每个用户都会登录,并且会创建一个新的 hasmap 并存储特定于该用户的值。我将其放入 session 中,该 session 将在应用程序中进一步使用。我正在使用 session.setattribute("map",mapobject) 和 session.getattribute("map")。
所以我的问题是:
此 map 需要同步吗?请注意,当用户登录时,我正在创建一个新的 HashMap 对象。
session 方法看起来不错吗?我正在 session.setAttribute("map",mapobject) 中设置 map ...因此,如果多个用户同时登录,这将为他们工作并将特定值存储在 session “ map ”中,否则会产生一些冲突与其他用户 session 。
最佳答案
如果单个用户可以同时发出多个请求,则 map 可能仍需要同步:浏览器通常会同时向给定域发出最多 4 个并发请求。这可能(AJAX 请求)或可能不会(可能是图像)对您的应用程序产生有意义的影响。但如果它真的发生了,你可能会得到一个令人讨厌的惊喜。
不要将 map 放入 session 中,因为 session 基本上就是一个 map ,您可以将一堆条目放入其中。这可能有助于解决第一点,因为对 session 的访问可能已经同步。
请注意,如果您更改此应用程序以使其托管在多台计算机上,那么您现在必须担心 session 复制和/或粘性 session 。这就是为什么我通常建议尽可能不要使用 session (而是将数据保存在数据库中)......但解决方案可能超出了这个问题的范围。
关于java - session 中登录网站的不同用户的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22912066/