第 15 章 网上书店实例
在本章中我们使用 JSP 和 Java Bean 来构建一个网上书店。本章介绍的例子可以分成两
大部分,第一部分是普通程序,用于客户在网上选购图书,第二部分是管理程序,用于在
服务器端处理客户的定单。客户端程序由以下几个部分构成:
default.jsp:会员登录界面(首页);
checklogon.jsp:检测登录代码和密码是否一致,根据由 JavaBean 返回的结果显示不同
的信息。
BuyerBean:会员的合法性检验所用的 Bean;
booklist.jsp:给登录会员显示当前书店中可供选择的图书;
addcart.jsp:将所选的图书加入购物车;
shoppingcart.jsp:查看购物车的内容;
本 例 的 数 据 库 采 用 Access(.MDB 数 据 库 ), 对 数 据 库 的 访 问 采 用 便 于 理 解 的
JDBC-ODBC 方式,在使用本例前先在本地数据库建立一个 ODBC 数据源:bookstore。
设置步骤如下:
(1)在开始->设置->控制面版(Win98、NT4.0)中选取“数据源(ODBC)”;在 Win
2000 Professional 和 Server 中分别位于“开始->设置->控制面版->管理工具”和“开始->程
序->管理工具”下。
(2)启动“数据源(ODBC)”配置程序,界面如图 15-1 所示。
图 15-1 ODBC 数据源管理界面
(3)在图 15-1 中“系统 DSN”选项下单击“添加”按钮,来添加一个系统的数据源
(DSN),则出现如图 15-2 所示数据源驱动程序选择界面:
382
(4)在图 15-2 中选择“Microsoft Access Driver (*.mdb)”单击“完成”加载 Access 数
据库的驱动,则出现如图 15-3 所示数据库 ODBC 安装界面:
图 15-2 数据源驱动程序选择界面
(5)在图 15-3 中单击“选择(S)…”按钮,启动一个类似资源管理器的界面来选择
数据库,如图 15-4 所示,在图 15-4 所示的界面中选择 bookstore.mdb。
图 15-3 数据库 ODBC 安装界面
图 15-4 数据库选择界面
383
15.1 会员登录
做一个网上书店,在顾客开始购书之前,必须要记录用户的一些信息以便用户在不同
的分类、不同的页面购书时,最后能够去收款台统一结帐,而且网上书店同时有许多人在
选购图书,也要求对不同的顾客进行区分,我们可以要求顾客在购书之前进行注册成为会
员,以后只用会员代码和密码即可登录。
为了便于说明现在的电子商务网站,由 JSP 做页面表现,由 Java Bean 做应用逻辑的结
构,在本例中将会员登录程序分成两大部分:一、Java Bean 用于对数据库的操作,验证用
户名和密码是否正确;二、JSP 页面部分,用于供用户会员代码和密码以及显示验证结果。
15.1.1 会员登录 Java Bean
我们网上书店中的会员信息的库结构如图 15-5 所示:
其中 memberID 是主键,用于区分不同的会员,新会员注册时只能使用没有被使用的
图 15-5 会员信息库
用户代码。
在验证时我们只要使用验证用户的 memberID 和其 pwd 是否一致即可判断该用户是否
合法,如果合法则其登录次数加 1。
1.10.2001
下面是用户验证部分的 Java Bean 的代码
清单 15-1 BuyerBean.Java
/* *BuyerBean.Java
*Copyright © 2000, 2001 by cuug llp.
*本 Bean 中有两个 set 方法和两个 get 方法:
*setMemberID()— 对 BuyerBean 中的 memberID 属性进行赋值;
*setPwd()—对 BuyerBean 中的 pwd 属性进行赋值;
*getLogontimes()— 取该会员登录的次数
*getMenberName()获得该会员的真实姓名,用于显示欢迎信息。
*main()方法用于将 BEAN 作为一个 Application 进行测试时使用,正式发布时可以删
除。
384
**/
package cuug;
import Java.sql.*;
public class BuyerBean {
//会员ID
//会员姓名
private String memberID = null ;
private String memberName = null;
private String pwd = null;
private int logontimes = -1;
private static String strDBDriver = “sun.jdbc.odbc.JdbcOdbcDriver”;
private static String strDBUrl = “jdbc:odbc:bookstore”;
//连接
private Connection conn =null;
private ResultSet rs = null;
//结果集
//数据源 ,
//密码
//登录的次数
//JDBC驱动
public BuyerBean (){
//加载JDBC-ODBC驱动
try {
Class.forName(strDBDriver );
}
//捕获异常
catch(Java.lang.ClassNotFoundException e){
System.err.println(“BuyerBean():” + e.getMessage());
}
}
//获得登录次数,登录的会员的名字也在该方法调用时获得
public int getLogontimes(){
String strSql = null;
try{
conn = DriverManager.getConnection(strDBUrl);
Statement stmt = conn.createStatement();
strSql = “Select logonTimes,membername from buyerInfo where memberID = ‘” +
memberID + “’ and pwd =’” + pwd + “’”;
rs = stmt.executeQuery(strSql);
while (rs.next()){
// 登录的次数
logontimes = rs.getInt(“logonTimes”);
385
//会员姓名
memberName = rs.getString(“membername”);
}
rs.close();
//如果是合法会员则将其登录次数加1
if (logontimes != -1 ) {
strSql = “Update buyerInfo set
logonTimes = logonTimes +1 where memberID = ‘” + memberID + “’”;
stmt.executeUpdate(strSql);
}
stmt.close();
conn.close();
}
//捕获异常
catch(SQLException e){
System.err.println(“BuyerBean.getLogontimes():” + e.getMessage());
}
return logontimes ;
}
//设置 memberID 属性;
public void setMemberID(String ID){
this.memberID = ID;
}
//设置 pwd 属性
public void setPwd(String password){
this.pwd = password;
}
//获得该会员的真实姓名,必须在取该会员登录的次数之后才能被赋予正确的值
public String getMemberName(){
return memberName;
}
//测试Bean中的各个方法是否能够正常工作
public static void main(String args[]){
BuyerBean buyer = new BuyerBean();
buyer.setMemberID(“abcd”);
buyer.setPwd(“1234”);
System.out.println(buyer.getLogontimes());
386
System.out.println(buyer.getMemberName());
}
}
在 BuyerBean 中用了 package
cuug; 在发布到 WEB SERVER 时,可以用 JAR(JDK
中带的打包工具)把编译后的 BuyerBean.class 打包成 JAR 文件在服务器的环境变量
classpath 中给予指定,或者在服务器 classpath 环境变量指定的目录下建一个 cuug 文件夹,
把 BuyerBean.class 放到 cuug 目录下。
15.1.2 会员登录 htm 与 JSP
会员登录要由两个部分来完成,第一个页面用于会员输入其 ID 和密码,当然首页还可
以加一些广告等的其它信息,在本例中略过。
清单 15-2 default.htm
CUUG ON LINE BOOK STORE – MEMBER LOGIN
CUUG 网上书店
会员登录页