JSP购物车实例.docx
- 文档编号:6142721
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:22
- 大小:21.65KB
JSP购物车实例.docx
《JSP购物车实例.docx》由会员分享,可在线阅读,更多相关《JSP购物车实例.docx(22页珍藏版)》请在冰豆网上搜索。
JSP购物车实例
目标:
l 掌握购物车的信息如何存储;
l 掌握购物车常用功能的实现。
主要内容:
l 首先分析用户上网购物的一般过程;
l 介绍采用什么样的数据结构存储购物信息;
l 编写购物界面;
l 完成向购物车添加物品的功能。
1、 用户上网购物的一般过程
在浏览物品的过程中如果对某件物品感兴趣,会添加到购物车(购物篮)中,随时可以查看购物车中的信息,如果不想要某件物品的话,可以删除,或者修改某种物品的数量,或者整个清空购物车,可以继续选择物品向购物车中添加。
最后用户可以购物这些物品,经过输入个人的送货地址信息和设定交易方式之后,可以生成订单。
网站的管理员可以对订单进行管理。
本实例模拟这个过程,但是进行了简化:
只能在物品列表中选择物品向购物车中添加。
确定购买后,不需要设置交易方式以及付款等。
实际处理过程,可以使用我们前面介绍的功能完成。
2、 购物车信息组织
因为在用户访问网站的整个过程中都可以访问购物车信息,所以购物车对象应该存放在session中。
因为用户购买的物品的种类和数量都不确定,所以需要使用一个合适的数据结构存储,我们选择ArrayList。
每一种物品都涉及数量,需要进行封装,把物品和数量封装成购物项,使用Item,每个Item对应一种物品以及该种物品的数量。
需要编写物品类表示物品的基本信息。
参考代码如下:
2.1物品类
该类中包含两个与分页显示相关的方法。
其中用到的DBBean是前面介绍的。
packagejavabean;
import;
importjava.sql.*;
publicclassGoods
{
privateStringgoodsid;
privateStringgoodsname;
privatefloatprice;
// 物品编号
publicvoidsetGoodsid(Stringgoodsid)
{
this.goodsid=goodsid;
}
publicStringgetGoodsid()
{
returngoodsid;
}
// 物品名称
publicvoidsetGoodsname(Stringgoodsname)
{
this.goodsname=goodsname;
}
publicStringgetGoodsname()
{
returngoodsname;
}
// 物品价格
publicvoidsetPrice(floatprice)
{
this.price=price;
}
publicfloatgetPrice()
{
returnprice;
}
publicArrayListgetGoodsByPage(intpageNo){
intnumber=10;
// 每一页显示的记录数
intbegin=(pageNo*number)-9;
intend=pageNo*number;
intindex=1;
DBBeandb=newDBBean();
// 要返回的结果对象
ArrayListgoods=newArrayList();
Stringsql="select*fromgoods";
ResultSetrs;
try{
rs=db.executeQuery(sql,null);
while(rs.next()){
// 在begin之前的记录是不显示的
if(index index++; continue; } // 在end之后的记录也不显示 if(index>end) break; index++; Stringgoodsid=rs.getString (1); Stringgoodsname=rs.getString (2); floatprice=rs.getFloat(3); Goodsg=newGoods(); g.setGoodsid(goodsid); g.setGoodsname(goodsname); g.setPrice(price); goods.add(g); } }catch(Exceptione){ e.printStackTrace(); }finally{ db.close(); } returngoods; } publicGoodsfindGoodsById(Stringgoodsid) { try{ // 编写查询数据库信息的SQL语句 Stringsql="select*fromgoodswheregoodsid=? "; DBBeandb=newDBBean(); ArrayListparams=newArrayList(); params.add(goodsid); ResultSetrs=db.executeQuery(sql,params); if(rs.next()) { //Stringgoodsid=rs.getString (1); Stringgoodsname=rs.getString (2); floatprice=rs.getFloat(3); Goodstemp=newGoods(); temp.setGoodsid(goodsid); temp.setGoodsname(goodsname); temp.setPrice(price); db.close(); returntemp; }else{ returnnull; } }catch(Exceptione){ ; returnnull; } } publicintgetPageCount(){ try{ // 编写查询数据库信息的SQL语句 Stringsql="selectcount(*)fromgoods"; DBBeandb=newDBBean(); ResultSetrs=db.executeQuery(sql,null); intnumber=0; if(rs.next()) number=rs.getInt (1); db.close(); return(number-1)/10+1; }catch(Exceptione){ return0; } } } 2.2Item类 packagejavabean; //购物项 publicclassItem { privateGoodsgoods; privateintquantity; publicItem(Goodsd,intquantity) { this.goods=d; this.quantity=quantity; } publicvoidsetGoods(Goodsgoods){ this.goods=goods; } publicGoodsgetGoods() { returngoods; } publicvoidsetQuantity(intquantity) { this.quantity=quantity; } publicintgetQuantity() { returnquantity; } } 3、 物品信息显示功能 采用MVC模式,考虑视图部分,不需要输入界面,只需要显示信息的界面。 模型部分,在前面的代码中已经实现。 控制器部分,需要编写GetAllGoods.java。 参考代码分别如下: 3.1界面代码 文件名: goodslist.jsp <%@pagecontentType="text/html;charset=gb2312"%> <%@taglibprefix="c"uri="/jstl/core"%> iftest="${pageNo! =1}"> pageNo=1">第一页 pageNo=${pageNo-1}">上一页 if> iftest="${pageNo! =pageCounter}"> pageNo=${pageNo+1}">下一页 pageNo=${pageCounter}">最后一页 if> 物品编号 物品名称 物品价格 forEachvar="g"items="${goods}"> ${g.goodsid} ${g.goodsname} ${g.price} goodsid=${g.goodsid}">添加到购物车 forEach>
3.2控制器代
packageservlet;
importjava.io.*;
importjavax.servlet.*;
import;
importjavabean.*;
importjava.util.*;
publicclassGetAllGoodsextendsHttpServlet
{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException
{
//response.setContentType("text/html;charset=gb2312");
//PrintWriterout=response.getWriter();
// 第一步:
获取用户的输入信息
StringpageNo=request.getParameter("pageNo");
intiPageNo=1;
if(pageNo!
=null)
{
iPageNo=Integer.parseInt(pageNo);
}
// 第二步:
调用JavaBean
Goodsg=newGoods();
ArrayListgoods=null;
goods=g.getGoodsByPage(iPageNo);
intpageCount=g.getPageCount();
//out.println("记录数:
"+users.size());
//out.println("当前页码:
"+iPageNo);
//out.println("总页码:
"+pageCount);
// 第三步:
传值
request.setAttribute("goods",goods);
request.setAttribute("pageNo",newInteger(iPageNo));
request.setAttribute("pageCounter",newInteger(pageCount));
// 第四步:
选择一个界面对用户进行响应
Stringforward="goodslist.jsp";
RequestDispatcherrd=request.getRequestDispatcher(forward);
rd.forward(request,response);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException
{
doGet(request,response);
}
}
4、 显示购物车中信息
该功能直接从session中获取购物车信息,所以不需要控制器和模型部分,只需要编写显示购物车信息的JSP文件即可,文件名为cart.jsp,参考代码如下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@taglibprefix="c"uri="/jstl/core"%>
购物车中的信息
forEachvar="item"items="${cart}"> forEach> 5、 向购物车中添加物品 采用MVC模式。 首先考虑输入和输出,添加物品的输入就是物品信息列表界面,输出应该是添加后的购物车信息界面(也可以重新回到物品信息界面),这两个界面都不需要编写。 考虑模型部分,需要编写购物车管理JavaBean,完成处理。 考虑控制器部分,需要获取用户选择的物品,然后添加到调用购物车管理Bean,完成添加。 下面是参考代码。 5.1模型部分 文件名CartManager.java packagejavabean; import; publicclassCartManager { // 表示购物车 privateArrayListcart; publicvoidsetCart(ArrayListcart) { this.cart=cart; } publicArrayListgetCart() { returncart; } // 添加的物品&数量 publicArrayListaddToCart(Goodsg,intquantity) { if(cart==null){ // 实例化购物车对象 cart=newArrayList(); // 添加到购物车 Itemitem=newItem(g,quantity); cart.add(item); } else { // 转换成数组 Objectitems[]=cart.toArray(); booleanfind=false;// 表示是否查找到 for(inti=0;i { Itemtemp=(Item)items[i]; // 判断购物车中是否存在要添加的物品 if(temp.getGoods().getGoodsid().equals(g.getGoodsid())) { temp.setQuantity(temp.getQuantity()+quantity); find=true; break; } } if(! find) { // 添加到购物车 Itemitem=newItem(g,quantity); cart.add(item); } } returncart; } } 5.2控制器部分 文件名: AddToCart.java packageservlet; importjava.io.*; importjavax.servlet.*; import; importjavabean.*; import 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。 copyright@ 2008-2022 冰点文档网站版权所有 经营许可证编号:鄂ICP备2022015515号-1${ ${ ${ ${item.quantity}