`
angelbill3
  • 浏览: 256525 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

利用JAVA-COOKIE做的购物车DEMO

    博客分类:
  • java
 
阅读更多
这几天写了下JAVA写的COOKIE的DEMO。可能代码有点长,希望对需要的朋友有帮助。
框架:SPRINGMVC

1、首先是购物车工具类 get set方法略
/**
 * 购物车工具类
 */
public class Cart {
	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(Cart.class);
	private List<CartItem> items = new ArrayList<CartItem>();
	private HttpServletRequest request;
	private double sumamount;//总计金额
	private int sumnumb;//总计数量
	
	public Cart() {
	}
	
	//增加
	public void addItem(CartItem item) {
		if (items.contains(item)) {// 如果购物项已经存在于购物车,累加其购买数量
			for (CartItem cItem : items) {
				if (cItem.equals(item)) {
					cItem.setAmount(cItem.getAmount() + item.getAmount());
					double price = cItem.getSpace().getPrice();
					double totalamount = DataUtil.mul(price, cItem.getAmount(),1);
					cItem.setTotalamount(totalamount);
					break;
				}
			}
		} else {
			double price = item.getSpace().getPrice();
			double totalamount = DataUtil.mul(price, item.getAmount(),1);
			item.setTotalamount(totalamount);
			items.add(item);
		}
		//计算总价
		sumamount = this.getsumamount();
		sumnumb = this.getsumnumb();
	}
	
	//删除
	public void deleteItem(CartItem item) {
		if (items.contains(item)){
			items.remove(item);
		}
		//计算总价
		sumamount = this.getsumamount();
		sumnumb = this.getsumnumb();
	}
	
	//总价
	public double getsumamount(){
		double result = 0.0d;
		for(CartItem cItem: items){
			result = DataUtil.sum(result, cItem.getTotalamount());
		}
		return result;
	}
	
	//总数量
	public int getsumnumb(){
		int result = 0;
		for(CartItem cItem: items){
			result += cItem.getAmount();
		}
		return result;
	}
	
	/**
	 * 序列化
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public String serialize() throws UnsupportedEncodingException {
		StringBuilder buffer = new StringBuilder();
		for(int i = 0;i<items.size();i++){
			String item = items.get(i).toString();			
			buffer.append(item);
			buffer.append(";");
		}
		if (buffer.length() > 0)
			buffer.deleteCharAt(buffer.length() - 1);
		return buffer.toString();
	}
	
	/**
	 * 加载购物车
	 * @param ticketService
	 * @param content
	 * @throws UnsupportedEncodingException
	 */
	public void load(TicketService ticketService,String content) throws UnsupportedEncodingException {
		items.clear();
		if (content == null || "".equals(content))
			return;
		else {
			try {
				String[] itemsArry = content.split(";");
				int sumnumb = 0;//总数量
				double sumamount = 0.0;//总计
				for (int i = 0; i < itemsArry.length; i++) {
					String array = itemsArry[i];
					String[] strarray = array.split(",");
					int number = Integer.parseInt(strarray[0].split(":")[1]);
					int id = Integer.parseInt(strarray[1].split(":")[1]);
					//double price = Double.parseDouble(strarray[2].split(":")[1]);
					CartItem item = new CartItem();
					item.setAmount(number);
					Space space = ticketService.findBySpaceId(id);
					Ticket ticket = ticketService.findById(space.getTicketNo());
					space.setTicketName(ticket.getTicketName());
				
					item.setSpace(space);
					item.setTotalamount(number, space.getPrice());//算小计
					items.add(item);
					
					sumnumb += number;
					sumamount = DataUtil.sum(sumamount, item.getTotalamount());
				}
				this.setSumamount(sumamount);
				
			} catch (Exception e) {
				// TODO: handle exception
				return;
			}
		}
	}

	//删除所有
	public void deleteAll() {
		items.clear();
	}

}


2、购物车其中的一项(工具类)
/**
 * 购物车-一项
 * @author shiaj
 * Dec,2012
 */
@SuppressWarnings("serial")
public class CartItem implements java.io.Serializable{
	private int amount = 1;//数量
	private Space space;//商品实体类
	private double totalamount;//小计

	public CartItem(){}
	
	public CartItem(int amount,Space space) {
		this.amount = amount;
		this.space = space;
	}
	
	/**
	 * 小计
	 * @param amount
	 * @param price
	 */
	public void setTotalamount(int amount,double price) {
		this.totalamount = DataUtil.mul(amount, price, 2);
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((space == null) ? 0 : space.hashCode());
		return result;
	}
	
	@Override
	 	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		CartItem other = (CartItem) obj;
		if(this.space.getSpaceNo().equals(other.getSpace().getSpaceNo())){
			return true;
		}
		return false;
	}
	
	public String toString(){
		StringBuffer string = new StringBuffer();
		string.append("amount:" + amount + ",id:" + this.space.getSpaceNo() + 
				",price:" + this.space.getPrice());
		return string.toString();
	}

}



3、购物车的使用--ACTION类
@Controller
public class OrderAct extends SessionCart{
	@Autowired
	private TicketService ticketService;
	
	public static final String CART_ID = "cookie.cart.id";
	/**
	 * 查看购物车
	 * @param request
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/shoppingcart.jhtml", method = RequestMethod.GET)
	public String shoppingcart(HttpServletRequest request,ModelMap model){
		String flag = this.getCartFlag(request);
		if(flag == null || !flag.equals("havaReadCookie")){//COOKIE转SESSION
			//读取COOKIE
			Cart cart = this.getCart(request);
			this.setShoppingCartSession(request, cart);
		}
		return "WEB-INF/t/cms/www/red/index/shoppingcart.html";
	}
	
	/**
	 * 加入购物车
	 * @param request
	 * @param response
	 * @param test
	 * @throws Exception 
	 */
	@RequestMapping(value = "/addItem.jhtml")
	public void addItem(HttpServletRequest request,
			HttpServletResponse response,Space space,Integer amount) throws Exception {
		System.out.println(space.getSpaceNo());
		String flag = this.getCartFlag(request);
		Cart cart = new Cart();
		if(flag == null || !flag.equals("havaReadCookie")){//COOKIE转SESSION
			//读取COOKIE
			cart = this.getCart(request);
			
		} else{//若SESSION存在 则直接读取SESSION
			cart = this.getShoppingCartSession(request);
		}
		
		Space newspace = this.ticketService.findBySpaceId(space.getSpaceNo());
		Ticket ticket = this.ticketService.findById(newspace.getTicketNo());
		newspace.setTicketName(ticket.getTicketName());
		CartItem item = new CartItem(amount,newspace);
		cart.addItem(item);
		
		//放入购物车
		saveToCookie(response, cart);
		
		this.setCartFlag(request, "havaReadCookie");
		this.setShoppingCartSession(request, cart);
		
		String msg;
		msg = "{'success':false}";
		ResponseUtils.renderJson(response, msg);
	}
	
	/**
	 * 删除某一项
	 * @param request
	 * @param response
	 * @param test
	 * @throws Exception 
	 */
	@RequestMapping(value = "/delItem.jhtml")
	public void Item(HttpServletRequest request,
			HttpServletResponse response,Space space,Integer amount) throws Exception {
		String flag = this.getCartFlag(request);
		Cart cart = new Cart();
		if(flag == null || !flag.equals("havaReadCookie")){//COOKIE转SESSION
			//读取COOKIE
			cart = this.getCart(request);
			
		} else{//若SESSION存在 则直接读取SESSION
			cart = this.getShoppingCartSession(request);
		}
		
		Space newtest = this.ticketService.findBySpaceId(space.getSpaceNo());
		CartItem item = new CartItem(amount,newtest);
		cart.deleteItem(item);
		
		//放入购物车
		saveToCookie(response, cart);
		
		this.setCartFlag(request, "havaReadCookie");
		this.setShoppingCartSession(request, cart);
		
		String msg;
		msg = "{'success':false}";
		ResponseUtils.renderJson(response, msg);
	}
	
	/**
	 * 保存cookie
	 */
	private void saveToCookie(HttpServletResponse response, Cart cart)
			throws Exception {
		CookieUtils.addCookie(response, CART_ID + "01", cart.serialize());
	}
	
	/**
	 * 购物车的初始化
	 * 
	 * @return CartService
	 */
	private Cart getCart(HttpServletRequest request) {
		Cart cs = null;
		try {
			String cartStr = "";
			cartStr = CookieUtils.findCookie(request, CART_ID + "01");
			cs = new Cart();
			if (cartStr != null && !"".equals(cartStr)) {
				cs.load(ticketService,cartStr);
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return cs;
	}
}



附、COOKIE工具类
public class CookieUtils {
	public static final int MAX_AGE = 60 * 60 * 24 * 7;

	/**
	 * 添加COOKIE
	 * @param response
	 * @param key
	 * @param value
	 * @throws UnsupportedEncodingException
	 */
	public static void addCookie(HttpServletResponse response, String key,
			String value) throws UnsupportedEncodingException {
		value = URLEncoder.encode(value, "utf-8");
		Cookie cookie = new Cookie(key, value);
		cookie.setMaxAge(MAX_AGE);
		cookie.setPath("/");
		response.addCookie(cookie);
	}

	/**
	 * 删除COOKIE
	 * @param response
	 * @param key
	 */
	public static void deleteCookie(HttpServletResponse response, String key) {
		Cookie cookie = new Cookie(key, "");
		cookie.setMaxAge(0);
		cookie.setPath("/");
		response.addCookie(cookie);
	}

	/**
	 * 查找COOKIE
	 * @param request
	 * @param key
	 * @return	String
	 * @throws UnsupportedEncodingException
	 */
	public static String findCookie(HttpServletRequest request, String key)
			throws UnsupportedEncodingException {	
		Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (int i = 0; i < cookies.length; i++) {
				if (key.equals(cookies[i].getName())) {
					return URLDecoder.decode(cookies[i].getValue(), "utf-8");
				}
			}
		}
		return null;
	}
		
}


分享到:
评论

相关推荐

    jsp+servlet写的购物车demo

    通过这个"jsp+servlet写的购物车demo",初学者可以深入理解Web开发中的核心概念和技术,以及如何将它们组合起来创建一个实际的应用。同时,这也是进一步学习Spring MVC、Struts等高级框架的良好基础。

    cookie的使用,实用的demo

    Cookie主要用于存储用户登录状态、购物车信息等临时数据。 Session则是服务器端用来跟踪用户会话的一种技术。当用户登录后,服务器会创建一个Session对象,将用户信息存储在这个对象中,并为该Session分配一个唯一...

    购物车案例

    在IT行业中,购物车功能是电子商务网站或应用程序的核心组成部分,它允许用户选择商品并暂时存储在虚拟购物车内,以便后续结账。在这个“购物车案例”中,我们可能看到一个简单的实现,它涵盖了一些基本的编程概念和...

    cookie_demo2.zip

    "cookie_demo2.zip"这个压缩包文件似乎包含了一个关于Cookie使用的示例,特别是关注于Cookie的生命周期。接下来,我们将深入探讨Cookie、Session以及它们生命周期的相关知识点。 **1. Cookie的基本概念** Cookie是...

    ServletCookie DEMO

    ServletCookie DEMO是一个示例项目,它展示了在Java Web开发中如何使用Servlet和Cookie进行...通过分析和实践这个DEMO,开发者可以更深入地理解Servlet和Cookie的工作原理,以及如何在Java Web应用中有效地利用它们。

    cookie_demo4.zip

    Cookie通常用于会话管理、个性化体验、购物车功能等。 **中文处理** 在Cookie中处理中文字符可能会遇到编码问题,因为不同的系统和浏览器可能使用不同的字符编码标准。常见的编码格式有ASCII、UTF-8、GBK等。如果...

    购物车实例

    为了解决这个问题,服务器会为每个用户创建一个唯一的Session ID,并将其保存在客户端(通常是Cookie),同时在服务器端存储与该ID关联的数据,如购物车内容。每当客户端发送请求时,它都会将Session ID一并发送,...

    一个关于Session的小demo

    Session是服务器端存储的一个数据结构,用于保存用户特定的信息,比如用户的登录状态、购物车内容等。当用户首次访问网站并创建Session时,服务器会为该用户分配一个唯一的Session ID,并通过Cookie将其返回给浏览器...

    cookie机制实现登陆、退出

    在Web开发中,Cookie是一种非常重要的技术,它用于在客户端和服务器之间传递状态信息。Cookie机制主要用于实现用户登录...在`cookie_demo`这样的项目中,开发者可以学习和实践这些概念,以加深对Cookie工作原理的理解。

    java web 开发的简易商城系统适用于小白入门

    - Cookie是客户端存储数据的方式,常用于临时保存用户偏好设置或者购物车信息。 7. **JSP标签库**: - JSTL(JavaServer Pages Standard Tag Library)和EL(Expression Language)可以简化JSP页面的编写,提高...

    购物车的实现

    至于`friend_demo`,可能是演示或示例代码,展示了如何实现购物车功能,尤其是涉及好友推荐或社交元素的场景。 总结来说,购物车的实现涉及到Web开发的核心技术,如session和cookie管理,同时需要数据库支持来持久...

    基于JAVA的网上图书超市

    【基于JAVA的网上图书超市】是一个使用Java编程...总体来说,【基于JAVA的网上图书超市】是一个集成了用户管理、商品展示、购物车、搜索、订单处理等功能的完整电商系统,体现了Java Web开发中的多项关键技术与实践。

    品红具有电子购物车功能

    通过分析这个demo,开发者可以学习如何在实际项目中构建和优化电子购物车功能,提升电商系统的整体性能和用户体验。 综上所述,电子购物车是电商系统不可或缺的一部分,它涵盖了用户交互、价格计算、促销策略、数据...

    decoration_购物结算demo_

    6. **状态管理**:购物车中的商品信息需要在用户浏览过程中保持,这可能需要用到session或者cookie来管理用户购物车的状态,或者在后端实现状态的持久化。 7. **计算逻辑**:购物结算的核心是计算功能,包括单个...

    javaWEB servlet版 图书商城demo

    JavaWeb Servlet版图书商城Demo是一个基于JavaWeb技术的在线图书销售平台示例,适用于那些已经对JavaWeb有基本了解的学习者。这个项目旨在提供一个实际的、可运行的应用程序,帮助开发者理解如何在Web环境中使用...

    Java网上购物系统(文档+源码t+视频)

    这个系统包括了用户管理、商品浏览、购物车、订单处理、支付接口等多个核心功能模块,是学习和实践Java Web开发的理想案例。系统文档、源代码以及配套的视频教程共同构成了一个完整的教学资源包,适合于进行毕业设计...

    基于javaweb上机报告.doc

    使用 `Session` 和 `Cookie` 实现购物车 #### 4.1 使用 `Session` 存储购物车信息 可以使用 `HttpSession` 对象来存储用户的购物车信息。当用户添加商品到购物车时,可以创建一个 `HashMap` 来存储商品ID和数量,...

    电子商务网站 JSP

    购物车数据可能存储在session或者cookie中,以便跨页面保持状态。 4. **订单模块**:用户提交订单后,系统需要计算总价,检查库存,生成订单号,并存储订单信息。同时,可能还需要发送确认邮件或短信给用户。 5. **...

    用HttpClient来模拟浏览器GET_POST

    COOKIE是一个小的文本文件,保存在客户端电脑上,用于存储一些信息,例如登录信息、购物车信息等。HttpClient提供了COOKIE处理机制,允许我们轻松地处理COOKIE问题。 HttpClient是一个非常有用的工具,帮助我们轻松...

    网上书店模板(有demo设计文档和界面源码,界面很帅哟,)

    在网上书店中,用户登录状态的保持和购物车功能可能会用到Session和Cookie。Session用于存储用户在服务器端的状态信息,而Cookie则是在客户端存储的小型数据,通常用于跟踪用户行为或保存登录状态。 7. **安全机制...

Global site tag (gtag.js) - Google Analytics