[英]How does Java session work when I change the object
最近,我试图用Java会话编写购物车。 我使用List对象存储产品,然后存储在会话中。 当用户更改产品数量时,我使用下面的代码尝试更新会话。 它确实有效,因为当我刷新页面时,购物车图标旁边显示的数字已更改,但我真的不知道它是如何工作的。 谁能帮我; /?
这是用户取消特定产品时的代码,而我只是从列表中删除:
List<OrderProduct> orderProductList = (ArrayList<OrderProduct>)session.getAttribute("orderProductList");
for (int i = 0; i < orderProductList.size(); i ++) {
if (orderProductList.get(i).getProduct().getId() == productID) {
orderProductList.remove(i);
}
}
我的问题是我没有这样做
session.setAttribute(...)
但是当我在jsp中检索会话时,存储在会话中的对象被更改了,它是如何工作的?
您可以将HttpSession
视为一种每个用户的Map
,该Servlet容器会在整个请求中为您维护。 启动会话后,容器会生成一个唯一的sessionid cookie,并在响应中进行设置,并为您提供一个实例,您可以将其与会话数据相关联。 对于后续请求,容器负责标识sessionid cookie,并为您提供HttpSession
实例以及该会话特定的数据。 您不需要像调用setAttribute一样调用setAttribute
SomeObj obj = new SomeObj();
Map<String, SomeObj> map = HashMap();
map.put("key", obj);
SomeObj o2 = map.get("key");
o2.setProperty("foo");
现在,您已经更改了obj仍在地图中的状态。 您无需再次调用map.put。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.