package com.vo.shop; import java.math.RoundingMode; import java.text.NumberFormat; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; public class Cart { // 购物车商品总数 private int itemNumber = 0; private double totalPrice = 0; private Map<String,Object> items = new HashMap<String,Object>(); /** * 添加购物车 * * @param id * @param goods */ public void addCart(String id, Goods goods, int number) { if (!items.containsKey(id)) { GoodsItem item = new GoodsItem(goods, number); items.put(id, item); } else { GoodsItem item = (GoodsItem) items.get(id); item.setNumber(item.getNumber() + number); } setItemNumber(); } /** * 修改购买商品数量 */ public void updateCart(String id, int number) { if (items.containsKey(id)) { GoodsItem item = (GoodsItem) items.get(id); item.setNumber(number); setItemNumber(); } } /** * 删除购物车中的商品 */ public void delCart(String id) { if (items.containsKey(id)) { items.remove(id); setItemNumber(); } } /** * 设置购物车中商品数量 * * @return */ public void setItemNumber() { Iterator it = items.entrySet().iterator(); itemNumber = 0; while (it.hasNext()) { Map.Entry entry = (Entry) it.next(); GoodsItem gt = (GoodsItem) entry.getValue(); itemNumber += gt.getNumber(); } } /** * 获得购物车中的商品总价 */ public String getTotalPrice() { Iterator it = items.entrySet().iterator(); totalPrice = 0; while (it.hasNext()) { Map.Entry entry = (Entry) it.next(); GoodsItem gt = (GoodsItem) entry.getValue(); totalPrice += gt.getNumber() * gt.getGoods().getPrice(); } return roundHalfUp(totalPrice, 2); } /** * 清空购物车 */ public void clearCart() { itemNumber = 0; totalPrice = 0; items.clear(); } /** * 四舍五入。 * * @param number * 数值 * @return 舍入后的数值 * @see java.text.RoundingMode.HALF_UP */ public String roundHalfUp(double number, int frac) { NumberFormat fmt = NumberFormat.getInstance(Locale.CHINA); fmt.setMaximumFractionDigits(frac); fmt.setRoundingMode(RoundingMode.HALF_UP); return fmt.format(number); } public int getItemNumber() { return itemNumber; } public void setItemNumber(int itemNumber) { this.itemNumber = itemNumber; } public Map getItems() { return items; } public void setItems(Map items) { this.items = items; } public void setTotalPrice(float totalPrice) { this.totalPrice = totalPrice; } }
2.关于在浏览器中共享session,因为第一次打开浏览器,服务器会往你的浏览器写入一个cookie,cookie的值为sessionid,cookie存活周期为会话期间,只要会话结束,cookie就会被清除,第二次打开新浏览器的时候,浏览器的cookie已经不存在sessionid,服务器因为无法得到客户端发送过来的sessionid,所以会创建新的session。
解决办法:重写cookie存活时间,设置cookie有效时间为session的有效时间(request.getSession().getMaxInactiveInterval()),cookie的名称为JSESSIONID