购物车设计

1.购物车类
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

猜你喜欢

转载自learnmore.iteye.com/blog/1457328