J2EE体系技术支持下开发网上书店示例.docx
《J2EE体系技术支持下开发网上书店示例.docx》由会员分享,可在线阅读,更多相关《J2EE体系技术支持下开发网上书店示例.docx(60页珍藏版)》请在冰豆网上搜索。
J2EE体系技术支持下开发网上书店示例
J2EE体系技术支持下开发网上书店示例
要求:
在Weblogic7.0和JBuilder9.0下用JSP和JavaBean技术开发5.4.3中介绍的网上购物系统。
该示例在Weblogic8.1+JBuilder9.0+SQLServer2000下实现。
利用JSP、EJB(无状态会话Bean、有状态会话Bean、CMP)等技术,完成用户登录、浏览书目、订购图书并进行结算等基本功能。
在JBuilder中运行整个工程<点击“在JBuilder中运行整个工程”,在出现的“文件下载”对话框中选择“打开(O)”按钮> <<运行weblogic服务器,单击开始菜单中的所有程序|BEAWebLogicPlatfrom8.1|UsersProjects|wangdomain|StartServer. 在浏览器中输入http:
//localhost:
7001/bookweb/login.html.用户名:
yzl,密码:
123456>>
网上购书系统设计
本示例的程序设计分为以下四大部分:
1、数据库设计
该部分完成数据存储功能,本示例数据库bookstore1中的表及其字段列表如下:
表名
字段
客户信息
logname、realname、password、email
书籍信息
bookid、name、author、content、category、commend、publish_name、publish_address、price、on_sale_time、bk_num
订单
user_name、user_address、user_tel、user_cid、book_id、book_number、status、goods_price
表1 本示例数据库bookstore1中的表及其字段列表
2、EJB设计
该部分相当于系统的一组模型,封装了系统的数据及业务规则,本示例程序中的EJB及其功能列表如下:
EJB
功能
Members
以数据库bookstore1中的表“客户信息”为数据源的CMP实体Bean,代表合法成员,具有能够返回表“客户信息”中全部数据集合的Finder方法
memberfacade
无状态会话Bean,是login_confirm.jsp访问实体BeanMembers的接口,将从login_confirm.jsp接收到的用户名及密码与实体BeanMembers返回的数据集合比较,从而验证登录用户的合法性
Bookitem
以数据库bookstore1中的表“书籍信息”为数据源的CMP实体Bean,代表书籍,具有能够返回表“书籍信息”中全部数据集合的Finder方法
bookfacade
无状态会话Bean,是browse.jsp访问实体BeanBookitem的接口,具有将从实体BeanBookitem返回的数据集合通过browse.jsp呈现给用户
Order
以数据库bookstore1中的表“订单”为数据源的CMP实体Bean,代表订单信息,具有能够返回表“订单”中特定用户全部数据集合的Finder方法
cart
有状态会话Bean,代表购物车,能够将用户在browse.jsp中选中的书籍加入购物车并进行结算,并将购物车内容及结算结果通过cart.jsp、order.jsp、submit_order.jsp呈现给用户
表2本示例程序中的EJB及其功能列表
3、Web应用程序设计
该部分主要完成视图和控制功能,即获得用户请求,并依据用户请求调用EJB提供的功能,同时提供整个网上购书系统的前端数据展现,本示例程序中的JSP文件名及其功能列表如下:
文件名
功能
login.html
登录界面,要求输入用户名和密码
login_confirm.jsp
通过调用memberfacade检查用户名及密码的合法性,并将当前用户名设置为会话属性,供其他JSP文件调用
browse.jsp
通过调用bookfacade显示书库中的书籍列表,要求用户选购书籍
cart.jsp
通过调用cart将用户选中的书籍加入购物车,并进行结算
order.jsp
要求用户输入定购信息,并调用cart将用户信息写入“订单”表
submit_order.jsp
通过调用cart将用户订单信息再次显示给用户,并结束本次购书
表3本示例程序中的JSP文件名及其功能列表
4、Java类设计
本部分主要完成JSP和EJB代码的简化和结构化,本示例程序中的类文件名及其功能列表如下:
类文件名
功能
book.java
用于EJB的查询方法参数或返回值类型,代表书籍
Userbook.java
和book.java的功能相似,但包含了一个描述定购的书的数目属性
memb.java
用于EJB的查询方法中,代表用户名和密码。
SessionListener.java
利用监听Servlet监听当前在线人数。
GetInitialContext.java
提供方法建立WLS8.1的命名、目录服务对象
表4本示例程序中的类文件名及其功能列表
网上购书系统的实现
一、建立数据库和数据源
1、 在SQLServer2000中新建数据库bookstore1,并在bookstore1中新建表“客户信息”、“书籍信息”及“订单”,表“客户信息”、“书籍信息”及“订单”的结构设计如图11-27-1、11-27-2和11-27-3。
11-27-1表“客户信息”的结构设计
11-27-2表“书籍信息”的结构设计
11-27-3表“订单”的结构设计
2、在这三个表中分别录入几条记录,如图11-28-1、11-28-2和11-28-3
11-28-1表“客户信息”中的数据
11-28-2表“书籍信息”中的数据
11-28-3表“书籍信息”中的数据
3、启动WLS8.1,打开控制台,建立指向bookstore1数据库的连接池,步骤如图11-29-1—11-29-8。
11-29-1在控制台界面中用鼠标单击“ConnectionPools”
11-29-2选择配置新的JDBC连接池
11-29-3选择数据库
选择
数据库类型(DatabaseType)为:
MSSQLServer数据库
数据库驱动程序(DatabaseDriver)为:
Weblogic’sMSSQLServerDriver(Type4)Versions:
7.0,2
点击Continue按钮。
11-29-4定义连接属性
配置参数如下:
Name:
bookstorePool
DatabaseName:
bookstore1
HostName:
localhost
DatabaseUserName:
sa(注:
在SQLServer2000中设置“使用SQLServer身份验证”,并根据“登录名”配置该项参数)
Password:
********(注:
设置为SQLServer2000的登录密码)
ConfirmPassword:
*********
点击Continue按钮。
接着出现测试数据库连接界面(Testdatabaseconnection )如下:
11-29-5测试数据库连接界面(Testdatabaseconnection )
点击TestDriverConfiguration按钮,如测试成功会出现界面如下:
11-29-6测试数据库连接成功界面
点击Createanddeploy按钮。
部署成功回到界面如下:
11-29-7JDBC连接池(ConnectionPools)
11-29-8成功创建连接池后控制台左栏界面中出现bookstorePool
4、建立指向bookstore1数据库连接池的数据源,步骤如图11-30-1—11-30-9。
11-30-1在控制台界面中用鼠标单击“DataSources”
在出现的JDBCDataSources界面中单击ConfigureanewJDBCDataSource超级连接
11-30-2选择配置新的JDBC数据源
11-30-3在“Configurethedatasource ”中进行配置
配置参数如下:
Name:
bookstoreSource
JNDIName:
bookstoreSource
点击Continue按钮。
11-30-4在“ Connecttoconnectionpool ”中进行选择bookstorePool
选择刚才建的bookstorePool,点击Continue按钮。
11-30-5在“Targetthedatasource ”单击Create按钮
成功配置后的出现的界面如下:
11-30-6配置完成,可单击bookstoreSource超级连接查看
11-30-7Configuration 选项卡
在Configuration 选项卡中单击AdvancedOptions中的Show超级连接
11-30-8选中EmulateTwo-PhaseCommitfornon-XADriver
选中EmulateTwo-PhaseCommitfornon-XADriver,其余采用默认设置,单击Apply按钮。
重新启动Weblogic服务器使设置生效。
11-30-9成功创建数据源后控制台左栏界面中出现bookstoreSource
二、开发实现用户登录验证的EJBModule:
membentity
1、 启动Jbuilder9,在菜单中依次选择“File——NewProject”,新建一个工程bookstore,设置信息如图11-31所示。
11-31新建工程bookstore
2、 依次选择Next,完成新工程的创建,左栏界面将出现该工程,如图11-32所示。
11-32成功创建新工程后的界面
3、 在菜单中依次选择“File——New”,如图11-33所示,在ObjectGallery窗口中的Enterprise中选择EJBModule后,点击OK。
11-33在ObjectGallery窗口中的Enterprise中选择EJBModule
4、 如图11-34所示,在EJBModuleWizard窗口中Name项输入membentity,其余采用默认设置,单击OK。
11-34在EJBModuleWizard窗口中进行设置
5、如图11-35所示,在右栏界面的空白处单击鼠标右键,在弹出的菜单中选择ImportSchemaFromDatabase,从数据库中引入数据模式。
11-35从数据库中引入数据模式
6、 11-36所示,在DatabaseSchemaProvider中设置数据库连接信息,本例中要连接的数据库是在SQLServer2000中建立的数据库bookstore1。
各项设置如下:
选中Allschemas
Driver:
weblogic.jdbc.mssqlserver4.Driver
URL:
jdbc:
weblogic:
mssqlserver4:
bookstore1@localhost
Username:
(SQLServer身份验证的登录名)
Password:
(SQLServer身份验证的登录密码)
Datebasename:
weblogic:
mssqlserver4:
bookstore1@localhost
JNDIname:
bookstoreSource
其余设置为空
设置完毕后选择OK。
图11-36在DatabaseSchemaProvider中设置数据源
注:
若weblogic.jdbc.mssqlserver4.Driver不存在,则在Jbuilder9中依次选择Tools—EnterpriseSetup菜单,并如图11-36-1所示,在EnterpriseSetup窗口中的DataBaseDrivers选项卡中通过点击Add按钮加入WebLogic7xClient后选择OK并重新启动Jbuilder9后即可。
图11-36-1加载weblogic.jdbc.mssqlserver4.Driver
7、如图11-37所示,在左栏界面下方的数据源中的“客户信息”单击鼠标右键,在弹出的菜单中选择CreatCMP2.0EntityBean,在membentity中创建一个名为Members的CMP实体Bean。
图11-37在membentity中创建一个CMP实体Bean
8、如图11-38所示,在右栏界面中的“客户信息”处单击鼠标,显示该实体Bean的各项属性,更改Beanname为Members。
图11-38Members实体Bean的各项属性
9、如图11-39所示在Members处单击鼠标右键,依次选择Add—Finder菜单,建立一个Finder方法。
图11-39为Members增加Finder方法
10、在弹出的属性框中输入Finder方法的各项属性,如图11-40所示设置以下属性:
Findername:
findalluser
Returntype:
java.util.Collection
Homeinterface:
localhome
Query:
SELECTOBJECT(m)FROMMembersASm
图11-40设置Finder方法的各项属性
11、如图11-41所示,在空白处点击鼠标右键,依次选择CreateEJB—SessionBean菜单,在membentity中创建访问实体BeanMembers的无状态会话Bean。
图11-41在membentity中创建访问实体Bean的无状态会话Bean
12、如图11-42所示设置无状态会话Bean的属性:
Beanname:
membentityfacade
Interfaces:
remote
Sessiontype:
Stateless
Transactiontype:
Container
图11-42设置无状态会话Bean的属性
13、在membentityfacade处单击鼠标右键,选择OpenDDEditor,在窗口下方选择EJBLocalReferences后单击Add按钮,如图11-43-1—11-43-2所示,为façade建立EJB本地引用。
图11-43-1建立EJB本地引用
图11-43-2设置参数
14、返回EJBDesigner,如图11-44所示,在membentityfacade上点击鼠标右键,依次选择Add—Method菜单,创建新方法。
图11-44为membentityfacade创建新方法
15、如图11-45所示,设置方法属性如下:
Methodname:
login
Returntype:
String
Inputparameters:
Stringlogname,Stringpassword
Interfaces:
remote
图11-45设置方法属性
16、在membentityfacade上单击鼠标右键,选择ViewBeanSource,将显示如图11-46所示的membentityfacedeBean源代码窗口。
图11-46membentityfacedeBean源代码窗口
17、在该窗口中修改代码,得到如下源代码(阴影处表示新添代码):
窗体顶端
窗体底端
18、以上代码中黑体部分memb是一个类,创建过程如图11-47-1—11-47-3所示。
图11-47-1在ObjectGallery的General选项卡中选择Class
图11-47-2设置Class属性
图11-47-3memb类的源代码
19、如图11-48所示,在左上方的membentity处单击鼠标右键,选择Make,编译该EJBModule,若不报错,则编译通过,否则请按上述步骤进行修改。
图11-48编译membentity
20、启动WLS8.1后,如图11-49-1所示选择Deploy或Redeploy,部署membentity到WLS8.1,部署成功后在消息窗口应有如图11-49-2所示的提示成功的信息。
图11-49-1部署membentity到WLS8.1
图11-49-2部署成功后的消息窗口
21、如图11-50-1—11-50-4,生成对membentity进行测试的客户端程序。
图11-50-1在ObjectGallery的Enterprise选项卡中选择EJBTestClient
图11-50-2选择Application类型
图11-50-3设置测试EJB为membentityfacade
图11-50-4定义客户端测试程序应用配置
22、在membentityfacadeTestClient1的源代码窗口中将main方法修改如下(阴影部分为新添代码):
publicstaticvoidmain(String[]args){
membentityfacadeTestClient1client=newmembentityfacadeTestClient1();
client.create();
client.login("Mary","1111");
}
23、如图11-51所示,对客户端测试程序membentityfacadeTestClient1.java进行编译,若不报错表示程序编译通过,否则请按上述步骤进行修改。
图11-51对客户端测试程序membentityfacadeTestClient1.java进行编译
24、编译通过后在图11-51中选择Runusing“membentityfacadeTestClient1”运行测试程序,该程序的输出信息如下:
窗体顶端
窗体底端
25、若将客户端测试程序membentityfacadeTestClient1.java中的修改如下(阴影部分为修改部分):
26、若将客户端测试程序membentityfacadeTestClient1.java中的修改如下(阴影部分为修改部分):
三、开发实现书籍浏览和查询的EJBModule:
bookentity
该EJBModule包括以数据库bookstore1中的“书籍信息”表为数据源的实体Bean—Bookitem和访问该实体Bean的无状态会话Bean—bookfacade,因开发bookentity的详细步骤与membentity类似,因此以下列出主要步骤:
1、 如图11-52所示,在工程bookstore中新建一个名为bookentity的EJBModule。
图11-52新建一个名为bookentity的EJBModule
2、 在bookentity中引入数据模式,在DatabaseSchemaProvider中设置数据库连接信息,各
项设置如下:
选中Allschemas
Driver:
weblogic.jdbc.mssqlserver4.Driver
URL:
jdbc:
weblogic:
mssqlserver4:
bookstore1@localhost
Username:
(SQLServer身份验证的登录名)
Password:
(SQLServer身份验证的登录密码)
Datebasename:
weblogic:
mssqlserver4:
bookstore1@localhost
JNDIname:
bookstoreSource
其余设置为空
设置完毕后选择OK。
3、 建立与表“书籍信息”对应的实体BeanBookitem,并在Bookitem中增加一个Finder方法findallbook,该方法的返回值类型为java.util.Collection,Query语句为SELECTOBJECT(book)FROMBookitemASbook,如图11-53所示。
图11-53在Bookitem中增加Finder方法findallbook
4、在bookentity中创建访问实体BeanBookitem的无状态会话Beanbookfacade,如图11-54所示,设置bookfacade的属性为:
Beanname:
bookfacade
Interfaces:
remote
Sessiontype:
Stateless
Transactiontype:
Container
图11-54设置bookfacade的属性
5、如图11-55-1—11-55-2所示,为bookfaçade建立EJBLocalReference。
图11-55-1为bookfacade建立EJBLocalReference
图11-55-2设置参数
6、为bookfacade增加一个方法getallbook,如图11-56所示,设置方法属性如下:
Methodname:
getallbook
Returntype:
java.util.Collection
Interfaces:
remote
图11-56为bookfacade增加一个方法getallbook
7、为bookfacade增加一个方法getbookbyid,如图11-57所示,设置方法属性如下:
Methodname:
getbookbyid
Returntype:
Object
Inputparameters:
Stringbookid
Interfaces:
remote
图11-57为bookfacade增加一个方法getbookbyid
8、将bookfacadeBean的源代码修改为如下代码(阴影处表示新添代码):
窗体顶端
窗体底端
9、创建book类(Class),源代码如图11-58所示:
图11-58book类的源代码
10、编译该EJBModulebookentity,若不报错,则编译通过,否则请按上述步骤进行修改。
11、启动WLS8.1后,部署bookentity到WLS8.1,部署成功后在消息窗口应有如图11-59所示的提示成功的信息。
图11-59部署成功后的消息窗口
12、如图11-60所示,建立客户端程序对bookentity进行测试。
图11-60建立bookentity的客户端测试程序
13、将测试程序bookfacadeTestClient1.java的main方法修改如下(阴影部分为新添代码):
publicstaticvoidmain(String[]args){
bookfacadeTestClient1client=newbookfa