`
lixucheng
  • 浏览: 79196 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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

阅读更多
目标:
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程序设计基础教程

分享到:
评论

相关推荐

    jsp实例开发——购物车

    jsp开发实例——购物车,是一个综合开发实例。比较有针对性。

    jsp开发实例1——购物车

    是购物车的源代码,比较简单,易于理解,适合初学者

    JSP网络编程从基础到实践的实例代码

    实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 第5章 JSP的内置对象 实例20 request...

    JSP网络编程从基础到实践 实例代码

    实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 第5章 JSP的内置对象 实例20 request...

    EJB3.0——jsp网页调用实例

    很多学者对EJB3.0的有状态会话Bean和无状态会话Bean的概念不太清楚,通过本人这次上机实验,本人搞清楚了有状态会话Bean和无状态会话Bean的区别,同时利用无状态会话bean和有状态会话Bean实现了相关的实例。...

    jsp实例开发1

    很好的,肯定你能用。

    jsp网络编程从基础到实践

    实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 第5章 JSP的内置对象 实例20 request...

    JSP网络编程从基础到实践

    实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 JSP的内置对象 ...

    javaBean+EL+JSTL制作的购物车

    实例——jsp 无脚本技术实现的购物车。利用javaBena EL表达式 和JSTL 标准标签实现jsp无脚本技术实现的购物车,拥有详细的代码和解释!

    h_JAVA 2应用编程150例.rar

    实例14 使用JTextPane 36 实例15 实现多文档视图 37 实例16 使用进度条 39 实例17 使用工具提示 42 实例18 不同界面的风格 43 第2章 Java的二维和三维图形处理 45 实例19 颜色处理 46 实例20 合成效果 47 实例21 ...

    java应用软件程序设计

    260 实例80 文件的上传下载 262 实例81 收发E-mail 267 实例82 B/S结构的聊天室 269 实例83 网上选课 276 实例84 B/S结构的商业应用——购物车 282 实例85 通过JSP调用Applet程序 285 实例86 ...

    JavaWeb12-文件上传.rar

    JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar JavaWeb03-会话跟踪cookie与session.rar JavaWeb04-内置对象与...

    JAVA WEB典型模块与项目实战大全.part2(第二卷)

    第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...

    JAVA WEB典型模块与项目实战大全.part4

    第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...

    JAVA WEB典型模块与项目实战大全.part3(第三卷)

    第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...

    JAVA WEB典型模块与项目实战大全.part1(第一卷)

    第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...

    低清版 大型门户网站是这样炼成的.pdf

    5.3.6 动态实例化查询结果 313 5.4 qbc查询方式 314 5.4.1 基本查询 315 5.4.2 qbe查询 317 5.4.3 分页查询 318 5.4.4 复合查询 318 5.4.5 离线查询 319 5.5 本地sql查询 320 5.6 hibernate的批量处理 322 ...

Global site tag (gtag.js) - Google Analytics