收藏 分销(赏)

JSP购物车实例.doc

上传人:pc****0 文档编号:7170494 上传时间:2024-12-27 格式:DOC 页数:16 大小:139.50KB 下载积分:10 金币
下载 相关 举报
JSP购物车实例.doc_第1页
第1页 / 共16页
JSP购物车实例.doc_第2页
第2页 / 共16页


点击查看更多>>
资源描述
目标: l         掌握购物车的信息如何存储; l         掌握购物车常用功能的实现。 主要内容: l         首先分析用户上网购物的一般过程; l         介绍采用什么样的数据结构存储购物信息; l         编写购物界面; l         完成向购物车添加物品的功能。 1、 用户上网购物的一般过程 在浏览物品的过程中如果对某件物品感兴趣,会添加到购物车(购物篮)中,随时可以查看购物车中的信息,如果不想要某件物品的话,可以删除,或者修改某种物品的数量,或者整个清空购物车,可以继续选择物品向购物车中添加。最后用户可以购物这些物品,经过输入个人的送货地址信息和设定交易方式之后,可以生成订单。网站的管理员可以对订单进行管理。 本实例模拟这个过程,但是进行了简化:只能在物品列表中选择物品向购物车中添加。确定购买后,不需要设置交易方式以及付款等。实际处理过程,可以使用我们前面介绍的功能完成。 2、 购物车信息组织 因为在用户访问网站的整个过程中都可以访问购物车信息,所以购物车对象应该存放在session中。 因为用户购买的物品的种类和数量都不确定,所以需要使用一个合适的数据结构存储,我们选择ArrayList。 每一种物品都涉及数量,需要进行封装,把物品和数量封装成购物项,使用Item,每个Item对应一种物品以及该种物品的数量。 需要编写物品类表示物品的基本信息。 参考代码如下: 2.1 物品类     该类中包含两个与分页显示相关的方法。其中用到的DBBean是前面介绍的。 package 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 goodsname)    {       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 = 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 < begin) {                                    index++;                                    continue;                             }                             // 在end之后的记录也不显示                             if (index > end)                                    break;                             index++;                             String goodsid = rs.getString(1);                             String goodsname = 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语句              String 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 = new 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 = new 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)    {       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模式,考虑视图部分,不需要输入界面,只需要显示信息的界面。 模型部分,在前面的代码中已经实现。 控制器部分,需要编写GetAllGoods.java。 参考代码分别如下: 3.1 界面代码 文件名:goodslist.jsp <%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri=" <c:if test="${pageNo!=1}">        <a href="getAllGoods?pageNo=1">第一页</a>        <a href="getAllGoods?pageNo=${pageNo-1}">上一页</a> </c:if> <c:if test="${pageNo!=pageCounter}">        <a href="getAllGoods?pageNo=${pageNo+1}">下一页</a>        <a href="getAllGoods?pageNo=${pageCounter}">最后一页</a> </c:if> <br> <table width="200" border="1" height="56">        <tbody>               <tr>                      <td>                             物品编号                      </td>                      <td>                             物品名称                      </td>                      <td>                             物品价格                      </td>               </tr>               <c:forEach var="g" items="${goods}">                      <tr>                             <td>                                    ${g.goodsid}                             </td>                             <td>                                    ${g.goodsname}                             </td>                             <td>                                    ${g.price}                             </td>                             <td>                                    <a href="addToCart?goodsid=${g.goodsid}">添加到购物车</a>                             </td>                      </tr>               </c:forEach>        </tbody> </table> 3.2 控制器代 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javabean.*; import java.util.*; public class 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 iPageNo=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.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(HttpServletRequest request,HttpServletResponse response)      throws IOException,ServletException    {       doGet(request,response);    } } 4、 显示购物车中信息 该功能直接从session中获取购物车信息,所以不需要控制器和模型部分,只需要编写显示购物车信息的JSP文件即可,文件名为cart.jsp,参考代码如下: <%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri=" 购物车中的信息<br> <table border=1>    <tr>       <td>物品编号</td>       <td>物品名称</td>       <td>价格</td>       <td>数量</td>    </tr> <c:forEach var="item" items="${cart}">    <tr>       <td>${item.goods.goodsid}</td>       <td>${item.goods.goodsname}</td>       <td>${item.goods.price}</td>       <td>${item.quantity}</td> </c:forEach> </table> 5、 向购物车中添加物品 采用MVC模式。 首先考虑输入和输出,添加物品的输入就是物品信息列表界面,输出应该是添加后的购物车信息界面(也可以重新回到物品信息界面),这两个界面都不需要编写。 考虑模型部分,需要编写购物车管理JavaBean,完成处理。 考虑控制器部分,需要获取用户选择的物品,然后添加到调用购物车管理Bean,完成添加。 下面是参考代码。 5.1 模型部分 文件名CartManager.java package javabean; import java.util.ArrayList; public class CartManager {    // 表示购物车    private 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;i<items.length;i++)          {              Item temp = (Item)items[i];              // 判断购物车中是否存在要添加的物品              if(temp.getGoods().getGoodsid().equals(g.getGoodsid()))              {                 temp.setQuantity(temp.getQuantity()+quantity);                 find=true;                 break;              }          }          if(!find)          {             // 添加到购物车             Item item = new Item(g,quantity);            cart.add(item);          }       }       return cart;    } } 5.2 控制器部分 文件名:AddToCart.java package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javabean.*; import java.util.*; public class AddToCart extends HttpServlet {    public void doGet(HttpServletRequest request,HttpServletResponse response)      throws IOException,ServletException    { //       response.setContentType("text/html;charset=gb2312"); //       PrintWriter out = response.getWriter();     try{       // 得到要添加的物品的编号       String goodsid = request.getParameter("goodsid");       // 创建JavaBean对象       CartManager cartManager=new CartManager();       // 得到session对象       HttpSession session = request.getSession(true);       // 得到购物车对象      ArrayList cart = (ArrayList)session.getAttribute("cart");       // 用cart初始化cartManager       cartManager.setCart(cart);       // 构造物品对象       Goods g = new Goods();       g = g.findGoodsById(goodsid);       // out.println(g.getGoodsid());       cartManager.addToCart(g,1);       // 先把购物车重新存到session       session.setAttribute("cart",cartManager.getCart());     }catch(Exception e){       // out.println(e.toString());     }         response.sendRedirect("cart.jsp");         }    public void doPost(HttpServletRequest request,HttpServletResponse response)      throws IOException,ServletException    {       doGet(request,response);    } } 6、 Servlet的配置 web.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns=" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" <servlet>         <servlet-name>getAllGoods</servlet-name>         <servlet-class>servlet.GetAllGoods</servlet-class> </servlet> <servlet-mapping>         <servlet-name>getAllGoods</servlet-name>         <url-pattern>/getAllGoods</url-pattern> </servlet-mapping> <servlet>         <servlet-name>addToCart</servlet-name>         <servlet-class>servlet.AddToCart</servlet-class> </servlet> <servlet-mapping>         <servlet-name>addToCart</servlet-name>         <url-pattern>/addToCart</url-pattern> </servlet-mapping> </web-app> 7、 运行 编译所有文件,然后先访问getAllGoods Servlet,然后在物品信息界面上选择物品添加到购物车,之后就可以看到购物车中的信息了。 主要内容: l   完成购物车的其他基本功能; l   生成订单; l 小结 1、购物车的其它功能 对购物车的物品数量修改和物品删除功能是两外两个基本功能。实现过程与添加工程比较类似,这里只给出参考代码: 1.1 模型部分 文件名:CartManager.java(在上一讲的基础上修改,红色部分为添加的内容) package javabean; import java.util.ArrayList; import java.util.Iterator; public class CartManager {    // 表示购物车    private 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;i<items.length;i++)          {              Item temp = (Item)items[i];              // 判断购物车中是否存在要添加的物品              if(temp.getGoods().getGoodsid().equals(g.getGoodsid()))              {                 temp.setQuantity(temp.getQuantity()+quantity);                 find=true;                 break;              }          }          if(!find)          {             // 添加到购物车             Item item = new Item(g,quantity);             cart.add(item);         }       }       return cart;    }    public void delete(String goodsid)    {       // 转换成Iterator对象       Iterator i = cart.iterator();       while(i.hasNext())       {          // 得到一个购物项          Item temp = (Item)i.next();          if(temp.getGoods().getGoodsid().equals(goodsid))          {             cart.remove(temp);             break;          }       }    }    public void update(String goodsid,int quantity)    {       Iterator i = cart.iterator();       while(i.hasNext())       {          // 得到一个购物项          Item temp = (Item)i.next();          if(temp.getGoods().getGoodsid().equals(goodsid))          {             temp.setQuantity(quantity);             break;          }               }    }    } 1.2 修改视图部分 文件名:cart.jsp(在上一讲的基础上修改,红色部分为添加的内容) <%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri=" 购物车中的信息<br> <table border=1>    <tr>       <td>物品编号</td>       <td>物品名称</td>       <td>价格</td>       <td>数量</td>    </tr> <c:forEach var="item" items="${cart}">    <tr> <form action="processCart">     <input type="hidden" name="g
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服