- 浏览: 79196 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
一辈子的咲子推:
其实很多学生考试不及格未必就是不学习,太多学生把大学几年时间全 ...
真的不想监考 -
jackroomage:
看错了,你写的没有问题。sorry!!!
Java Web实践专题——访问路径问题 -
jackroomage:
<a href="./../bb/b_a.js ...
Java Web实践专题——访问路径问题
目标:
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程序设计基础教程》
发表评论
-
网页之间共享值
2007-03-19 13:49 450Web应用是由大量的网页组成的,运行的基本原理是:用户通过客 ... -
Java Web实践专题——Eclipse中CVS的使用
2007-03-19 14:50 596CVS概述 主要作用是管理代码的版本,尤其是多人协同开发的时 ... -
Eclipse中Web应用的开发
2007-03-30 09:35 502Eclipse中Web应用的开发 应用服务器:tomcat ... -
MVC模式在Java Web中的应用
2007-04-21 22:06 393流行的Java Web应用框架基本上都实现了MVC模型,下面分 ... -
Tomcat中连接池的配置和使用
2007-04-27 13:19 461对于大型网站来说,信 ... -
WebLogic中连接池错误Failed to Generate Wrapper Class的解决方案
2007-05-01 13:25 541很多人在使用Weblogic配置连接池之后,会碰到这样一个 ... -
Sun Java System Appliation Server中连接池的配置
2007-05-01 14:16 4981、准备驱动程序 把 ... -
Java Web中的分页显示——通过界面实现
2007-05-04 23:11 667在界面完成分页控制, ... -
Java Web中的分页显示——在模型中实现
2007-05-04 23:25 461在模型中实现分页显示,主要是在把查询的结果集转换成对象集合的 ... -
NetBeans中的几个快捷方式
2007-06-15 12:38 504几个比较常用的方便代码编写的功能如下: 1、引入用到的类 ... -
最好的Java Web开发的书应该是什么样子?
2007-06-20 14:50 680关于Java Web开发的技术非常多,JSP、Servet、J ... -
JSP培训(1)——概述
2007-08-21 08:35 516本文是JSP培训的笔记,是培训的第一次——概述。 (参考 ... -
JSP培训(2)——运行原理、文档结构、简单输入输出
2007-08-23 09:16 597目标: l 掌握Web应用的文档结构; l 掌握JSP ... -
JSP培训(3)——客户端验证、常用输出方式、JSTL基本用法
2007-08-30 09:49 509目标: l 掌握客户端验证的基本过程; l 掌握 ... -
JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if
2007-08-30 09:55 759目标: l 进一步体会JSP应用; l 掌握表达 ... -
JSP培训(5)——使用JavaBean完成业务逻辑
2007-08-31 16:42 496目标: l 掌握什么是JavaBean; l 掌握如何 ... -
JSP培训(6)——使用Servlet作为控制器实现MVC模式
2007-09-04 13:38 609目标: l 初步理解MVC ... -
JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
2007-09-04 13:43 533目标: l 掌握JDBC链接数据库的基本过程; l 掌 ... -
JSP培训(8)——添加功能和分页显示
2007-09-04 13:46 572学习目标: l 进一步掌握MVC设计模式; l 掌握添 ... -
JSP连接Microsoft SQL Server出错:Error establishing socket解决方法
2007-09-06 14:09 497安装SQL Server的补丁即可。 安装的时候需要注意:第 ...
相关推荐
jsp开发实例——购物车,是一个综合开发实例。比较有针对性。
是购物车的源代码,比较简单,易于理解,适合初学者
实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 第5章 JSP的内置对象 实例20 request...
实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 第5章 JSP的内置对象 实例20 request...
很多学者对EJB3.0的有状态会话Bean和无状态会话Bean的概念不太清楚,通过本人这次上机实验,本人搞清楚了有状态会话Bean和无状态会话Bean的区别,同时利用无状态会话bean和有状态会话Bean实现了相关的实例。...
很好的,肯定你能用。
实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 第5章 JSP的内置对象 实例20 request...
实例14 一个简单的计数器 实例15 include指令应用示例 实例16 forward应用程序示例 实例17 param应用程序示例 实例18 plugin应用程序示例 实例19 中文字符处理程序示例 JSP的内置对象 ...
实例——jsp 无脚本技术实现的购物车。利用javaBena EL表达式 和JSTL 标准标签实现jsp无脚本技术实现的购物车,拥有详细的代码和解释!
实例14 使用JTextPane 36 实例15 实现多文档视图 37 实例16 使用进度条 39 实例17 使用工具提示 42 实例18 不同界面的风格 43 第2章 Java的二维和三维图形处理 45 实例19 颜色处理 46 实例20 合成效果 47 实例21 ...
260 实例80 文件的上传下载 262 实例81 收发E-mail 267 实例82 B/S结构的聊天室 269 实例83 网上选课 276 实例84 B/S结构的商业应用——购物车 282 实例85 通过JSP调用Applet程序 285 实例86 ...
JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar JavaWeb03-会话跟踪cookie与session.rar JavaWeb04-内置对象与...
第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...
第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...
第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...
第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+...
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 ...