JSP购物车实例1.docx
《JSP购物车实例1.docx》由会员分享,可在线阅读,更多相关《JSP购物车实例1.docx(23页珍藏版)》请在冰豆网上搜索。
JSP购物车实例1
目标:
l 掌握购物车的信息如何存储;
l 掌握购物车常用功能的实现。
主要内容:
l 首先分析用户上网购物的一般过程;
l 介绍采用什么样的数据结构存储购物信息;
l 编写购物界面;
l 完成向购物车添加物品的功能。
1、 用户上网购物的一般过程
在浏览物品的过程中如果对某件物品感兴趣,会添加到购物车(购物篮)中,随时可以查看购物车中的信息,如果不想要某件物品的话,可以删除,或者修改某种物品的数量,或者整个清空购物车,可以继续选择物品向购物车中添加。
最后用户可以购物这些物品,经过输入个人的送货地址信息和设定交易方式之后,可以生成订单。
网站的管理员可以对订单进行管理。
本实例模拟这个过程,但是进行了简化:
只能在物品列表中选择物品向购物车中添加。
确定购买后,不需要设置交易方式以及付款等。
实际处理过程,可以使用我们前面介绍的功能完成。
2、 购物车信息组织
因为在用户访问网站的整个过程中都可以访问购物车信息,所以购物车对象应该存放在session中。
因为用户购买的物品的种类和数量都不确定,所以需要使用一个合适的数据结构存储,我们选择ArrayList。
每一种物品都涉及数量,需要进行封装,把物品和数量封装成购物项,使用Item,每个Item对应一种物品以及该种物品的数量。
需要编写物品类表示物品的基本信息。
参考代码如下:
2.1物品类
该类中包含两个和分页显示相关的方法。
其中用到的DBBean是前面介绍的。
packagejavabean;
importjava.util.ArrayList;
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){
System.out.println(e.toString());
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="
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.*;
importjavax.servlet.http.*;
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="
购物车中的信息
物品编号 |
物品名称 |
价格 |
数量 |
forEachvar="item"items="${cart}">
${item.goods.goodsid} |
${item.goods.goodsname} |
${item.goods.price} |
${item.quantity} | forEach>
5、 向购物车中添加物品
采用MVC模式。
首先考虑输入和输出,添加物品的输入就是物品信息列表界面,输出应该是添加后的购物车信息界面(也可以重新回到物品信息界面),这两个界面都不需要编写。
考虑模型部分,需要编写购物车管理JavaBean,完成处理。
考虑控制器部分,需要获取用户选择的物品,然后添加到调用购物车管理Bean,完成添加。
下面是参考代码。
5.1模型部分
文件名CartManager.java
packagejavabean;
importjava.util.ArrayList;
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;
展开阅读全文
相关搜索