购物车包括货物bean,业务逻辑处理bean(购物车bean),控制器servlet,显示页面mycart.jsp。
货物bean的属性对应了货物的数据库表的一些字段,同时加上了购买的数量。
packagecom.xie.shop.modal;
//货物bean
publicclassCartBean{
privateString id;
privateString goodName;
privatefloatgoodsPrice;
privateintgoodsNum;
privateString buyNum;
publicString getBuyNum() {
returnbuyNum;
}
publicvoidsetBuyNum(String buyNum) {
this.buyNum = buyNum;
}
publicString getId() {
returnid;
}
publicvoidsetId(String id) {
this.id = id;
}
publicString getGoodName() {
returngoodName;
}
publicvoidsetGoodName(String goodName) {
this.goodName = goodName;
}
publicfloatgetGoodsPrice() {
returngoodsPrice;
}
publicvoidsetGoodsPrice(floatgoodsPrice) {
this.goodsPrice = goodsPrice;
}
publicintgetGoodsNum() {
returngoodsNum;
}
publicvoidsetGoodsNum(intgoodsNum) {
this.goodsNum = goodsNum;
}
}
业务逻辑处理bean(购物车bean):
主要的逻辑是:将货物编号和货物实体放入一个HashMap中,HashMap购物车bean的一个属性,同时提供了一个能返回HashMap中value所对应的货物bean
import java.sql.Connection;
import java.sql.PreparedStatement;
//购物车的业务逻辑处理
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class MyCartPro {
private Connection ct=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
Map<String , CartBean> cMap=new HashMap<String, CartBean>();
private float totalPrice=0;
public float getTotalPrice() {
return totalPrice;
}
public Map<String, CartBean> getcMap() {
return cMap;
}
/**
* 返回选中准备购买的货物
* @author Administrator:centre
* @param id:传入选中货物的编号
* @return cb:操作成功返回一个CartBean
*/
private CartBean getGood(String id){
CartBean cb=new CartBean();
try {
ct=new ConnGood().getConn();
ps=ct.prepareStatement("select goodsid, goodsname,goodsprice,goodsnum from goods where goodsid=?");
ps.setString(1, id);
rs=ps.executeQuery();
if(rs.next()) {
cb.setId(rs.getLong(1)+"");
cb.setGoodName(rs.getString(2));
cb.setGoodsPrice(rs.getFloat(3));
cb.setGoodsNum(rs.getInt(4));
cb.setBuyNum(1+"");
}
} catch (Exception e) {
System.out.println("取得CartBean失败。");
e.printStackTrace();
}finally{
closeRs();
}
return cb;
}
/**
* 将cb放入到一个map里
* @author Administrator:centre
* @param id:商品id
*/
public void addBook(String id){
if (!cMap.containsKey(id)) {
cMap.put(id, getGood(id));
}else {
cMap.get(id).setBuyNum((Integer.parseInt(cMap.get(id).getBuyNum())+1)+"");
}
}
/**
* 返回购物车容器
* @author Administrator:centre
* @return 返回购物车的容器
*/
public Map<String , CartBean> myCart(){
return getcMap();
}
/**
* 删除选定的商品
* @author Administrator:centre
* @param id:货物的id
* @return:删除成功,返回true,否则返回false
*/
public void deleteBook(String id){
cMap.remove(id);
}
/**
* 删除购物车的所有商品
* @author Administrator:centre
*/
public void deleteAllBooks(){
cMap.clear();
}
/**
* 修改所有商品购买数量
* @author Administrator:centre
* @param id:商品id
* @param num:商品数量
*/
public void updateNum(String[] id,String[] num){
for (int i = 0; i < id.length; i++) {
if (cMap.containsKey(id[i])) {
if (num[i].equals("0")||num[i].equals("")) {
cMap.remove(id[i]);
}else {
cMap.get(id[i]).setBuyNum(num[i]);
}
}
}
}
/**
* 返回所有购买的货物
* @author Administrator:centre
* @return:无返回值
*/
public List<CartBean> showMyCart(){
List<CartBean> al=new ArrayList<CartBean>();
Iterator<String> it=cMap.keySet().iterator();
totalPrice=0;
while (it.hasNext()) {
CartBean cb=cMap.get(it.next());
totalPrice+=Integer.parseInt(cb.getBuyNum())*cb.getGoodsPrice();
al.add(cb);
}
return al;
}
/**
* @author Administrator:centre
* 关闭相关的数据库资源
*/
private void closeRs(){
try {
if (rs!=null) {
rs.close();
rs=null;
}
if (ps!=null) {
ps.close();
ps=null;
}
if (ct!=null) {
ct.close();
ct=null;
}
} catch (Exception e) {
System.out.println("关闭资源失败。");
e.printStackTrace();
}
}
}
控制器servlet:
如何让每个IE进程都只有唯一的一个购物车呢?我用了session。
importjava.io.IOException;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.xie.shop.modal.CartBean;
importcom.xie.shop.modal.MyCartPro;
publicclassMyCartServletextendsHttpServlet {
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
*@paramrequest the request send by the client to the server
*@paramresponse the response send by the server to the client
*@throwsServletException if an error occurred
*@throwsIOException if an error occurred
*/
publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
String cartop=request.getParameter("cartop");
if(cartop.equals("add")) {
String id=request.getParameter("id");
String pageNow=request.getParameter("pageNow");
MyCartPro mcp=(MyCartPro)request.getSession().getAttribute("mycart");
if(mcp==null) {
//第一次购物,创建一个购物车,同时加入session
mcp=newMyCartPro();
request.getSession().setAttribute("mycart", mcp);
}
if(id!=null) {
mcp.addBook(id);
}
List<CartBean> al=mcp.showMyCart();
request.setAttribute("alist", al);
request.setAttribute("pageNow", pageNow);
request.getRequestDispatcher("jsps/mycart.jsp").forward(request, response);
}elseif(cartop.equals("delete")) {
MyCartPro mcp=(MyCartPro)request.getSession().getAttribute("mycart");
String id=request.getParameter("id");
String pageNow=request.getParameter("pageNow");
mcp.deleteBook(id);
List<CartBean> al=mcp.showMyCart();
request.setAttribute("alist", al);
request.setAttribute("pageNow", pageNow);
request.getRequestDispatcher("jsps/mycart.jsp").forward(request, response);
}elseif(cartop.equals("deleteall")) {
String pageNow=request.getParameter("pageNow");
MyCartPro mcp=(MyCartPro)request.getSession().getAttribute("mycart");
if(mcp==null) {
request.setAttribute("pageNow", pageNow);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
mcp.deleteAllBooks();
request.setAttribute("pageNow", pageNow);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}elseif(cartop.equals("chagenum")) {
String pageNow=request.getParameter("pageNow");
String[] id=request.getParameterValues("goodId");
String[] newNum=request.getParameterValues("newNum");
/*for (int i = 0; i < id.length; i++) {
System.out.println("id=="+id[i]+" "+"num=="+newNum[i]);
}*/
MyCartPro mcp=(MyCartPro)request.getSession().getAttribute("mycart");
if(mcp==null) {
request.getRequestDispatcher("jsps/mycart.jsp").forward(request, response);
}else{
mcp.updateNum(id, newNum);
List<CartBean> al=mcp.showMyCart();
request.setAttribute("alist", al);
request.setAttribute("pageNow", pageNow);
request.getRequestDispatcher("jsps/mycart.jsp").forward(request, response);
}
}
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
*@paramrequest the request send by the client to the server
*@paramresponse the response send by the server to the client
*@throwsServletException if an error occurred
*@throwsIOException if an error occurred
*/
publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
this.doGet(request, response);
}
}
显示页面mycart.jsp