1、JSP购物车实例1目标:l掌握购物车的信息如何存储;l掌握购物车常用功能的实现。主要内容:l首先分析用户上网购物的一般过程;l介绍采用什么样的数据结构存储购物信息;l编写购物界面;l完成向购物车添加物品的功能。1、用户上网购物的一般过程在浏览物品的过程中如果对某件物品感兴趣,会添加到购物车(购物篮)中,随时可以查看购物车中的信息,如果不想要某件物品的话,可以删除,或者修改某种物品的数量,或者整个清空购物车,可以继续选择物品向购物车中添加。最后用户可以购物这些物品,经过输入个人的送货地址信息和设定交易方式之后,可以生成订单。网站的管理员可以对订单进行管理。本实例模拟这个过程,但是进行了简化:只能
2、在物品列表中选择物品向购物车中添加。确定购买后,不需要设置交易方式以及付款等。实际处理过程,可以使用我们前面介绍的功能完成。2、购物车信息组织因为在用户访问网站的整个过程中都可以访问购物车信息,所以购物车对象应该存放在session中。因为用户购买的物品的种类和数量都不确定,所以需要使用一个合适的数据结构存储,我们选择ArrayList。每一种物品都涉及数量,需要进行封装,把物品和数量封装成购物项,使用Item,每个Item对应一种物品以及该种物品的数量。需要编写物品类表示物品的基本信息。参考代码如下:2.1 物品类该类中包含两个和分页显示相关的方法。其中用到的DBBean是前面介绍的。pac
3、kage javabean;import java.util.ArrayList;import java.sql.*;public class Goods private String goodsid; private String goodsname; private float price; /物品编号 public void setGoodsid(String goodsid) this.goodsid = goodsid; public String getGoodsid() return goodsid; /物品名称 public void setGoodsname(String g
4、oodsname) this.goodsname = goodsname; public String getGoodsname() return goodsname; /物品价格 public void setPrice(float price) this.price = price; public float getPrice() return price; public ArrayList getGoodsByPage(int pageNo) int number = 10; /每一页显示的记录数 int begin = (pageNo * number) - 9; int end =
5、pageNo * number; int index = 1; DBBean db = new DBBean(); /要返回的结果对象 ArrayList goods = new ArrayList(); String sql = select * from goods; ResultSet rs; try rs = db.executeQuery(sql,null); while (rs.next() /在begin之前的记录是不显示的 if (index end) break; index+; String goodsid = rs.getString(1); String goodsna
6、me = rs.getString(2); float price = rs.getFloat(3); Goods g = new Goods(); g.setGoodsid(goodsid); g.setGoodsname(goodsname); g.setPrice(price); goods.add(g); catch(Exception e) e.printStackTrace(); finally db.close(); return goods; public Goods findGoodsById(String goodsid) try /编写查询数据库信息的SQL语句 Stri
7、ng sql = select * from goods where goodsid=?; DBBean db = new DBBean(); ArrayList params = new ArrayList(); params.add(goodsid); ResultSet rs = db.executeQuery(sql,params); if(rs.next() /String goodsid =rs.getString(1); String goodsname = rs.getString(2); float price = rs.getFloat(3); Goods temp = n
8、ew Goods(); temp.setGoodsid(goodsid); temp.setGoodsname(goodsname); temp.setPrice(price); db.close(); return temp; else return null; catch (Exception e) System.out.println(e.toString(); return null; public int getPageCount() try /编写查询数据库信息的SQL语句 String sql = select count(*) from goods; DBBean db = n
9、ew DBBean(); ResultSet rs=db.executeQuery(sql,null); int number=0; if(rs.next() number = rs.getInt(1); db.close(); return (number - 1) / 10 + 1; catch (Exception e) return 0; 2.2 Item类package javabean;/ 购物项public class Item private Goods goods; private int quantity; public Item(Goods d,int quantity)
10、 this.goods = d; this.quantity = quantity; public void setGoods(Goods goods) this.goods = goods; public Goods getGoods() return goods; public void setQuantity(int quantity) this.quantity = quantity; public int getQuantity() return quantity; 3、物品信息显示功能采用MVC模式,考虑视图部分,不需要输入界面,只需要显示信息的界面。模型部分,在前面的代码中已经实
11、现。控制器部分,需要编写GetAllGoods.java。参考代码分别如下:3.1 界面代码文件名:goodslist.jsp% taglib prefix=c uri= 第一页 上一页 下一页 最后一页 物品编号 物品名称 物品价格 $g.goodsid $g.goodsname $g.price 添加到购物车 3.2 控制器代package servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javabean.*;import java.util.*;public class
12、GetAllGoods extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException /response.setContentType(text/html;charset=gb2312); /PrintWriter out = response.getWriter(); /第一步:获取用户的输入信息 String pageNo=request.getParameter(pageNo); int i
13、PageNo=1; if(pageNo!=null) iPageNo = Integer.parseInt(pageNo); /第二步:调用JavaBean Goods g = new Goods(); ArrayList goods=null; goods = g.getGoodsByPage(iPageNo); int pageCount=g.getPageCount(); / out.println(记录数:+users.size(); / out.println(当前页码:+iPageNo); / out.println(总页码:+pageCount); /第三步:传值 request
14、.setAttribute(goods,goods); request.setAttribute(pageNo,new Integer(iPageNo); request.setAttribute(pageCounter,new Integer(pageCount); /第四步:选择一个界面对用户进行响应 String forward=goodslist.jsp; RequestDispatcher rd = request.getRequestDispatcher(forward); rd.forward(request,response); public void doPost(HttpS
15、ervletRequest request,HttpServletResponse response) throws IOException,ServletException doGet(request,response); 4、显示购物车中信息该功能直接从session中获取购物车信息,所以不需要控制器和模型部分,只需要编写显示购物车信息的JSP文件即可,文件名为cart.jsp,参考代码如下:% taglib prefix=c uri=购物车中的信息 物品编号 物品名称 价格 数量 $item.goods.goodsid $item.goods.goodsname $item.goods.
16、price $item.quantity5、向购物车中添加物品采用MVC模式。首先考虑输入和输出,添加物品的输入就是物品信息列表界面,输出应该是添加后的购物车信息界面(也可以重新回到物品信息界面),这两个界面都不需要编写。考虑模型部分,需要编写购物车管理JavaBean,完成处理。考虑控制器部分,需要获取用户选择的物品,然后添加到调用购物车管理Bean,完成添加。下面是参考代码。5.1 模型部分文件名CartManager.javapackage javabean;import java.util.ArrayList;public class CartManager /表示购物车 privat
17、e ArrayList cart; public void setCart(ArrayList cart) this.cart = cart; public ArrayList getCart() return cart; /添加的物品数量 public ArrayList addToCart(Goods g,int quantity) if(cart=null) /实例化购物车对象 cart=new ArrayList(); /添加到购物车 Item item = new Item(g,quantity); cart.add(item); else /转换成数组 Object items = cart.toArray(); boolean find=false; /表示是否查找到 for(int i=0;iitems.length;i+) Item temp = (Item)itemsi; /判断购物车中是否存在要添加的物品 if(temp.getGoods().getGoodsid().equals(g.getGoodsid() temp.setQuantity(temp.getQuantity()+quantity); find=true;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1