会话中的Hashmap,用于登录网站的不同用户

时间:2014-04-07 12:11:19

标签: java collections hashmap

在我的Web应用程序中,我创建了新的Hashmap并将其保存在第一个Servlet中的会话中,并在下一个servlet中使用它。在下一个servlet中,我在地图值上执行一些java脚本函数,因此更新地图并在会话中再次放置更新的地图。最后我在jsp中显示新值并提交将更新服务器中的新值,谢谢你的页面。

请注意:这是一个基于用户的应用程序,因此每个用户都将登录并创建新的hasmap并存储特定于用户的值。比我把它放在会话中,将在application.set正在使用session.setattribute(“map”,mapobject)和session.getattribute(“map”)。

所以我的问题是:

  1. 此地图是否需要同步?请注意,当用户登录时,我正在创建HashMap的新对象。

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

2 个答案:

答案 0 :(得分:2)

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

  2. 不是在会话中放置地图,因为会话基本上是一个地图,你可以把一堆条目放入其中。这可能有助于第一点,因为对会话的访问可能已经同步。

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

答案 1 :(得分:0)

每个请求都有一个具有会话ID的唯一会话,因此不会与session.setAttribute("map",mapobject)

冲突