Java 登录网站的不同用户的Hashmap会话

Java 登录网站的不同用户的Hashmap会话,java,collections,hashmap,Java,Collections,Hashmap,在我的web应用程序中,我创建了新的Hashmap,并将其保存在第一个Servlet的会话中,然后在下一个Servlet中使用它。在下一个servlet中,我将对映射值执行一些java脚本函数,从而更新映射,并将更新后的映射再次放入会话中。最后,我将在jsp中显示新值并提交,这将更新服务器中的新值,感谢页面将出现 注意:它是一个基于用户的应用程序,因此每个用户都将登录,并创建一个新的hasmap,存储特定于用户的值。然后我将它放在会话中,这将在应用程序中进一步使用。我使用session.seta

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

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

因此,我的问题是:

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

  • 会话方法看起来好吗?我正在会话中设置map.setAttribute(“map”,mapobject)…因此,如果多个用户同时登录,这将对他们起作用,并将特定值存储在会话“map”中,否则将与其他用户会话发生冲突


  • 每个请求都有一个具有会话id的唯一会话,因此与
    session.setAttribute(“map”,mapobject)

  • 如果单个用户可以同时发出多个请求,那么映射可能仍然需要同步:浏览器通常会同时向给定域发出多达4个并发请求。这可能会(AJAX请求)也可能不会(可能是图像)对应用程序产生有意义的影响。但如果真的发生了,你可能会得到一个可怕的惊喜

  • 由于会话基本上是一个映射,您可以将一组条目放入其中,而不是将映射放入会话中。这可能对第一点有所帮助,因为对会话的访问可能已经同步

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


  • 您说过“请注意,如果您更改此应用程序,使其托管在多台计算机上”——您能解释一下托管在多台计算机上的情况吗?我正在为我的应用程序创建一个jar文件,我将把它放入集群服务器(因此有两台机器)。此外,在登录时,我将映射值放入会话中,因此我认为一个用户不能同时发出多个请求。谢谢现代网络应用程序由多台计算机通过前端负载平衡器提供服务。此外,如果一个用户可以访问会话cookie,则他们可以同时向同一台服务器发出多个请求。网络架构中没有任何东西可以阻止它。