0
HttpSession session=requestObj.getSession();
ArrayList<String> items=(ArrayList<String>)session.getAttribute("itemlist");
items.add(newitem);

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

setAttribute("itemlist",items)

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

4

2 回答 2

2

您不必这样做 ----setAttribute("itemlist",items)---因为您有对存储在 items 中的 itemlist 的引用。

ArrayList<String> items=(ArrayList<String>)session.getAttribute("itemlist");

因此,您对“项目”所做的任何更改都将在“项目列表”属性中可见。

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

于 2013-02-25T17:15:45.993 回答
1

你的代码是 Java 的,所以我猜它已经在服务器上运行了?

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

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

于 2013-02-25T16:40:12.567 回答