首页 > 程序开发 > 综合编程 > 其他综合 >

SSH框架之如何实现仿淘宝购物demo

2016-03-15

还记得六月份实习的时候,曾经做过一个电商的项目,项目里面需要实现类似淘宝购物车的移动端的demo,随着项目的进行,再一次跟购物车碰面,但是今天呢,不是移动端的需求,如何使用SSH框架实现类似淘宝的

还记得六月份实习的时候,曾经做过一个电商的项目,项目里面需要实现类似淘宝购物车的移动端的demo,随着项目的进行,再一次跟购物车碰面,但是今天呢,不是移动端的需求,如何使用SSH框架实现类似淘宝的购物车功能呢?包括如何添加到购物车,清空购物车等功能,那么购物车怎么玩儿呢?今天这篇博客,小编就简单的来总结一下如何使用SSH框架实现购物车,希望对有需要的小伙伴有帮助,博文中的不足之处,还请各位大神多多指教,小女子在此谢主隆恩。

第一步,购物车模块的实体的封装,两个实体一个购物车对象,也就是一个一个的宝贝,包括购物项的集合以及总计,另一个实体是购物车项对象,包括商品的信息、商品的数量,商品的小计等。那么问题来了,购物项的集合,我们是采用map、set还是list呢?如果使用set,买一个东西数据就变了,总是在变;所以肯定是一个list或者是map,如果我们只是简单的显示购物车里面的商品用list就可以了,但是还需要一个功能-移除,所以采用map,直接移除key就可以了,移除的时候比较方便。我们把她命名为Cart和CartItem,代码如下,cart的代码:

package cn.itcast.shop.cart.vo;

import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 购物车对象
 * 
 * @author 丁国华
 * 
 */
public class Cart implements Serializable{
	// 购物车属性
	// 购物项集合:Map的key就是商品pid,value:购物项
	private Map map = new LinkedHashMap();

	// Cart对象中有一个叫cartItems属性.
	public Collection getCartItems(){
		return map.values();
	}
	
	// 购物总计:
	private double total;

	public double getTotal() {
		return total;
	}

	// 购物车的功能:
	// 1.将购物项添加到购物车
	public void addCart(CartItem cartItem) {
		// 判断购物车中是否已经存在该购物项:
		/*
		 *  * 如果存在:
		 *  	* 数量增加
		 *  	* 总计 = 总计 + 购物项小计
		 *  * 如果不存在:
		 *  	* 向map中添加购物项
		 *  	* 总计 = 总计 + 购物项小计
		 */
		// 获得商品id.
		Integer pid = cartItem.getProduct().getPid();
		// 判断购物车中是否已经存在该购物项:
		if(map.containsKey(pid)){
			// 存在
			CartItem _cartItem = map.get(pid);// 获得购物车中原来的购物项
			_cartItem.setCount(_cartItem.getCount()+cartItem.getCount());
		}else{
			// 不存在
			map.put(pid, cartItem);
		}
		// 设置总计的值
		total += cartItem.getSubtotal();
	}

	// 2.从购物车移除购物项
	public void removeCart(Integer pid) {
		// 将购物项移除购物车:
		CartItem cartItem = map.remove(pid);
		// 总计 = 总计 -移除的购物项小计:
		total -= cartItem.getSubtotal();
	}

	// 3.清空购物车
	public void clearCart() {
		// 将所有购物项清空
		map.clear();
		// 将总计设置为0
		total = 0;
	}
}

CartItem的代码如下所示:

package cn.itcast.shop.cart.vo;

import cn.itcast.shop.product.vo.Product;

/**
 * 购物项对象
 * @author 丁国华
 *
 */
public class CartItem {
	private Product product;	// 购物项中商品信息
	private int count;			// 购买某种商品数量
	private double subtotal;	// 购买某种商品小计
	public Product getProduct() {
		return product;
	}
	public void setProduct(Product product) {
		this.product = product;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	// 小计自动计算的.
	public double getSubtotal() {
		return count * product.getShop_price();
	}
	
	
}
第二步,购物车模块跳转到购物车页面,点击加入购物车的按钮,完成页面的跳转,跳转到cart页面,配置到applicationContext.xml和struts.xml里面即可,配置比较简单,小编在这里就不一一介绍了,主要来看一下jsp里面的代码,代码如下所示:

<%@ page="" language="java" contenttype="text/html; charset=UTF-8" pageencoding="UTF-8">
<%@ taglib="" uri="/struts-tags" prefix="s">
<script> function saveCart(){ document.getElementById("cartForm").submit(); } </script> 传智播客
正品保障
<%@ include="" file="menu.jsp">
&page=1">
&page=1">
">
编号:
商城价:
¥: 参 考 价:
促销:
限时抢购
我们的优势 Copyright &copy; 2005-2015 网上商城 版权所有
"/>
购买数量:
">
<%@ include="" file="menu.jsp"><%@ page="" language="java" contenttype="text/html; charset=UTF-8" pageencoding="UTF-8"><%@ taglib="" uri="/struts-tags" prefix="s">在jsp页面里面添加一个购物车页面cart,代码如下所示:

<%@ page="" language="java" contenttype="text/html; charset=UTF-8" pageencoding="UTF-8">
<%@ taglib="" uri="/struts-tags" prefix="s">

传智播客
正品保障
<%@ include="" file="menu.jsp">
购物车信息
图片 商品 价格 数量 小计 操作
"> " class="delete">删除
登录后确认是否享有优惠 赠送积分: 商品金额:
清空购物车 提交订单

亲!您还没有购物!请先去购物!

我们的优势
Copyright &copy; 2005-2015 网上商城 版权所有
<%@ include="" file="menu.jsp"><%@ page="" language="java" contenttype="text/html; charset=UTF-8" pageencoding="UTF-8"><%@ taglib="" uri="/struts-tags" prefix="s">第三步,这个时候页面可以提交以及进行跳转了,现在我们需要做的就是将购物模块添加到购物车、清空购物车和移除购物车,代码如下所示:

package cn.itcast.shop.cart.action;



import org.apache.struts2.ServletActionContext;

import cn.itcast.shop.cart.vo.Cart;
import cn.itcast.shop.cart.vo.CartItem;
import cn.itcast.shop.product.service.ProductService;
import cn.itcast.shop.product.vo.Product;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 购物车Action
 * 
 * @author 传智.郭嘉
 * 
 */
public class CartAction extends ActionSupport {
	// 接收pid
	private Integer pid;
	// 接收数量count
	private Integer count;
	// 注入商品的Service
	private ProductService productService;

	public void setProductService(ProductService productService) {
		this.productService = productService;
	}

	public void setPid(Integer pid) {
		this.pid = pid;
	}

	public void setCount(Integer count) {
		this.count = count;
	}

	// 将购物项添加到购物车:执行的方法
	public String addCart() {
		// 封装一个CartItem对象.
		CartItem cartItem = new CartItem();
		// 设置数量:
		cartItem.setCount(count);
		// 根据pid进行查询商品:
		Product product = productService.findByPid(pid);
		// 设置商品:
		cartItem.setProduct(product);
		// 将购物项添加到购物车.
		// 购物车应该存在session中.
		Cart cart = getCart();
		cart.addCart(cartItem);
		return "addCart";
	}

	// 清空购物车的执行的方法:
	public String clearCart(){
		// 获得购物车对象.
		Cart cart = getCart();
		// 调用购物车中清空方法.
		cart.clearCart();
		return "clearCart";
	}
	
	// 从购物车中移除购物项的方法:
	public String removeCart(){
		// 获得购物车对象
		Cart cart = getCart();
		// 调用购物车中移除的方法:
		cart.removeCart(pid);
		// 返回页面:
		return "removeCart";
	}
	
	// 我的购物车:执行的方法
	public String myCart(){
		return "myCart";
	}
	
	/**
	 * 获得购物车的方法:从session中获得购物车.
	 * @return
	 */
	private Cart getCart() {
		Cart cart = (Cart) ServletActionContext.getRequest().getSession()
				.getAttribute("cart");
		if (cart == null) {
			cart = new Cart();
			ServletActionContext.getRequest().getSession()
					.setAttribute("cart", cart);
		}
		return cart;
	}
}

接着,我们来看一下实现的效果,如下图所示:

\
小编寄语:该博文小编简单介绍了如何使用ssh框架实现类似淘宝购物车的功能,总得来说,实现的思路分一下几个部分,首先将购物车模块的实体进行封装,其次将购物车模块跳转到购物车压面,之后实现添加、删除等功能,包括jsp页面的编写以及struts里面的都是及其重要的,在做这个项目的过程也遇到各种各样的问题,但是最后都一一解决了,开心ing,今天的博文就跟大家分享到这里,java之路,精彩下次再续......
相关文章
最新文章
热点推荐