首页 理论教育实现网络购物车功能,存放位置分析

实现网络购物车功能,存放位置分析

【摘要】:实际的超市中会有真实的购物车帮我们临时保存所要购买的商品,网店中也需要类似的一种能保存在不同页面上挑选的商品的购物车。现请您利用所学的JSP 技术,实现一个网络购物车的功能。如何实现网络购物车的功能。网络购物车应存放在哪里。存入在session 中,是将购物车存放在服务器端,而存放在Cookie 中,是将购物车存放在客户端。为了简单实现网络购物车的功能,目前shopDB 中只定义了一张表:GoodsInfo。

完成本任务所用到的主要知识点:

➢ JavaBean 与动作

➢ JSP 内置对象

➢ 会话跟踪技术

随着Internet 的快速发展,网络中出现了很多类似于现实生活购物的网络虚拟商店,人们通过网络销售他们的商品,让我们足不出户就可以购买生活中的一切用品,大大方便了我们的生活。实际的超市中会有真实的购物车帮我们临时保存所要购买的商品,网店中也需要类似的一种能保存在不同页面上挑选的商品的购物车。现请您利用所学的JSP 技术(JavaBean 与动作、会话跟踪技术、JSP 内置对象等),实现一个网络购物车的功能。

(1)如何实现网络购物车的功能。

现实生活中的购物车可以存放多个商品,网络购物车也一样。要存放多个商品,自然而然就想到了数组和集合。但是数组在定义时需要指定长度,事先并不清楚用户要购买多少商品,所以使用数组是不可取的。

可以定义一个Java 类表示购物车,购物车内包含一个用于存放用户挑选的商品信息的集合(容器对象),并提供向容器中添加商品、删除商品和获取容器对象的方法。但是还有这样一种情况:当用户多次向容器中添加同一商品怎么办?若用户挑选了在购物车中已经存在的商品就直接放入容器中的话,这样不仅会增加存储空间的消耗,而且不便于商品的统计和管理。所以,就在表示商品的类中定义一个表示订购数量的变量。若用户挑选了购物车中已存在的商品,那么只需要更改一下该商品的订购数量就可以了。

(2)网络购物车应存放在哪里。

上面分析了商品存放的位置(即购物车中),那购物车又存放在哪儿呢?现实生活中,购物车存放的是各用户挑选的商品(即将购买的商品),且每个用户是相互独立的。网络购物车也是一样的。既然这样,那么可以将购物车存放到session 或者Cookie 中。存入在session 中,是将购物车存放在服务器端,而存放在Cookie 中,是将购物车存放在客户端。但是Cookie 有内容大小限制,而且只能存储字符串数据,又要受限于客户端的情况(比如客户端把Cookie 禁用了),所以,我们将购物车存入session 中。

(1)建立数据库(shopDB)及数据表

为了简单实现网络购物车的功能,目前shopDB 中只定义了一张表:GoodsInfo(商品信息表)。商品信息表的字段及其说明见表上机6.1。

表上机6.1 商品信息表(GoodsInfo)

插入的测试数据如图上机6.1 所示。

图上机6.1 商品信息表测试数据

(2)新建Web 项目sj7_1。

(3)根据商品信息表建立JavaBean 类(GoodsInfo.java)。

在Eclipse 中建立JavaBean 时可以使用工具生成getter/setter 方法。编写好字段之后右键单击类中空白处,在弹出的菜单中选择“Source”➔“Generate Getters and Setters…”,如图上机6.2 所示。

图上机6.2 生成getter/setter 方法

然后将弹出如图上机6.3 所示的窗口,单击“Select All”按钮就可以选择所有的字段都生产getter/setter 方法。当然也可以展开左边字段列表树形菜单,勾选想要生成的getter/setter 方法。

图上机6.3 生成getter/setter 方法

GoodsInfo.java 代码如下:

GoodsInfo 类对应GoodsInfo 表,定义了id、name、price、photo、desc 等商品的属性。其中quantity 属性表示购物车中此商品的订购数量,getSum()方法计算当前商品的金额小计。

(4)购物车(Cart.java)。

在网络购物车项目中,Cart 类型的一个对象代表的是一个用户所使用的虚拟的购物车,这个类中定义了能对虚拟购物车进行操作的方法,例如:向购物车中添加商品、从购物车中删除商品、清空购物车、更改购物车中的商品数量和计算所有商品的总价等方法。类中的cart 属性是ArrayList 类型的容器对象,保存了用户所订购的所有商品,也就是保存了许多GoodsInfo 类型的对象。

(5)数据库连接工具类(DBConn.java),代码如下。

数据库连接工具类定义了获取数据库连接和关闭数据库连接的方法。

(6)商品信息的数据访问类GoodsDao.java,代码如下。

商品信息数据访问类定义了两个获取商品数据的方法。getAllGoods()方法用于从数据库中获取所的商品信息,getGoodsInfo()方法根据商品编号获取某个商品的信息。

(7)显示商品的页面showGoods.jsp,代码如下。

showGoods.jsp 调用了GoodsDao 类的getAllGoods()方法查询所有的商品信息,并使用表格显示商品,运行效果如图上机6.4 所示。(www.chuimin.cn)

图上机6.4 显示商品界面

(8)添加商品(addGoods.jsp)。

当用户在浏览商品时单击“购买”链接,就要将用户选择的商品放入购物车,即实现添加商品功能,下面是addGoods.jsp 页面的代码。

在addGoods.jsp 页面,首先获取了参数id(商品的编号),然后根据id 从数据库中获取该商品信息,再调用购物车添加商品的方法,将此商品加入购物车,若成功则转向显示购物车的页面。在添加商品的整个操作过程中,若获取的id 为空(null 或空字符串)或者从数据库中未获取到要添加商品的商品信息,就构造一个ShoppingError 对象,设置它的属性,然后转向error.jsp 页面显示。addGoods.jsp 中涉及的StringUtil 类和ShoppingError 类的代码如下。

StringUtil.java 代码:

ShoppingError.java 代码:

ShoppingError 是为了便于在页面之间传递错误信息而定义的一个表示错误信息的类,它符合JavaBean 规范。在addGoods.jsp 中,先将错误信息封装成一个ShoppingError 对象,并将ShoppingError 对象存入request 中,然后跳转到error.jsp 页面输出ShoppingError 对象中保存的错误信息。这是比较常用的页面之间数据传递的方式。

error.jsp 页面代码如下:

在error.jsp 页面中使用了<jsp:useBean>、<jsp:getProperty>等JSP 标准动作元素来操作JavaBean 对象。例如当访问addGoods.jsp 时,参数id 的值为空的运行效果如图上机6.5 所示,将跳转到error.jsp 页面输出错误信息。

图上机6.5 商品放入购物车失败

(9)显示购物车的页面(showCart.jsp),代码如下。

在showCart.jsp 页面中,使用表格列出了购物车中的所有商品,并提供了删除商品、修改商品数量、清空购物车的功能链接。

当购物车为空时,运行效果如图上机6.6 所示。

图上机6.6 显示购物车页面(购物车为空时)

单击“继续购物”,当选择了多个商品后,购物车页面运行效果如图上机6.7 所示。

图上机6.7 显示购物车页面(有商品时)

(10)删除商品、修改商品数量、清空购物车等功能页面。

删除商品、修改商品数量、清空购物车等功能页面的实现相对简单些,主要就是调用购物车对象中的相关方法。

➢ 删除商品页面

删除商品页面(removeGoods.jsp),代码如下:

例如,在图上机6.7 所示的购物车页面的基础上删除商品“华硕(ASUS)X85E30SE-SL 14.0 英寸笔记本电脑”,删除后的购物车页面效果如图上机6.8 所示。

图上机6.8 删除华硕电脑后的购物车页面

➢ 更改商品数量的页面

更改商品数量的页面(updateGoodsQuantity.jsp),代码如下。

例如,在图上机6.8 所示的购物车页面的基础上更改商品“ThinkPad SL400 2743-NCC 14.1 英寸LED 屏宽屏笔记本电脑”的订购数量为100 台,更改后的购物车页面效果如图上机6.9 所示。

图上机6.9 更改ThinkPad SL400 电脑的数量后的购物车页面

➢ 清空购物车的页面

清空购物车的页面(clearCart.jsp),代码如下。

例如使用了清空的购物车功能后的购物车页面效果如图上机6.10 所示。

图上机6.10 清空购物车后的购物车页面