会话数据何时发送到服务器 HttpSession session=requestObj.getSession(); ArrayList items=(ArrayList)session.getAttribute(“itemlist”); 项目。添加(新项目);

会话数据何时发送到服务器 HttpSession session=requestObj.getSession(); ArrayList items=(ArrayList)session.getAttribute(“itemlist”); 项目。添加(新项目);,session,jakarta-ee,servlets,Session,Jakarta Ee,Servlets,在这段代码中,为什么不需要设置属性 setAttribute(“项目列表”,项目) 返回会话对象,即使我更新了此会话中的数据。 据我所知,会话数据存储在服务器中。那么,当这些数据被发送到服务器时?您的代码是用Java编写的,所以我猜它已经在服务器上运行了 如果您只有一个服务器进程,那么您将直接修改对已存储在服务器会话中的列表的相同内存中引用,因此您将自动看到更改 但是,在修改状态时,实际上应该调用setAttribute。如果您在集群中运行,或者在像Google App Engine这样的云环境

在这段代码中,为什么不需要设置属性

setAttribute(“项目列表”,项目)

返回会话对象,即使我更新了此会话中的数据。
据我所知,会话数据存储在服务器中。那么,当这些数据被发送到服务器时?

您的代码是用Java编写的,所以我猜它已经在服务器上运行了

如果您只有一个服务器进程,那么您将直接修改对已存储在服务器会话中的列表的相同内存中引用,因此您将自动看到更改


但是,在修改状态时,实际上应该调用
setAttribute
。如果您在集群中运行,或者在像Google App Engine这样的云环境中运行您的应用程序的多个副本,那么此调用将用于将更改传播到其他进程。

您的代码是用Java编写的,所以我猜它已经在服务器上运行了

如果您只有一个服务器进程,那么您将直接修改对已存储在服务器会话中的列表的相同内存中引用,因此您将自动看到更改

但是,在修改状态时,实际上应该调用
setAttribute
。如果您在集群中运行,或者在像Google App Engine这样的云环境中运行您的应用程序的多个副本,那么此调用将用于将更改传播到其他进程。

您不必执行--setAttribute(“itemlist”,items)--因为您有一个存储在items中的对itemlist的引用

HttpSession session=requestObj.getSession();
ArrayList<String> items=(ArrayList<String>)session.getAttribute("itemlist");
items.add(newitem);
arraylistitems=(ArrayList)session.getAttribute(“itemlist”);
因此,您对“items”所做的任何更改都将在“itemlist”属性中可见

提交表单时,数据将发送到服务器。可以通过单击提交按钮提交表单

您不必执行--setAttribute(“itemlist”,items)--因为您有一个存储在items中的对itemlist的引用

HttpSession session=requestObj.getSession();
ArrayList<String> items=(ArrayList<String>)session.getAttribute("itemlist");
items.add(newitem);
arraylistitems=(ArrayList)session.getAttribute(“itemlist”);
因此,您对“items”所做的任何更改都将在“itemlist”属性中可见

提交表单时,数据将发送到服务器。可以通过单击提交按钮提交表单