您的位置:首页 > Web前端 > JavaScript

JSP培训(14)——购物车实例(上)

2007-09-29 09:33 281 查看
目标:
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="http://java.sun.com/jsp/jstl/core"%>

<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="http://java.sun.com/jsp/jstl/core"%>

购物车中的信息<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="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<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,然后在物品信息界面上选择物品添加到购物车,之后就可以看到购物车中的信息了。


参考教材:《Java Web程序设计基础教程》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: