基于J2EE(羊毛衫)远程定制系统的设计研究
2009-01-06
作者:方晔,石金华,郭放
1 引言
目前制约我国服装生产企业发展的瓶颈已经从生产环节转向市场营销与贸易环节,许多服装生产企业都开始采用网上定制的方式来开拓销售市场。另一方面,借助于WWW通过动态的交互式信息发布,出现了诸如网上购物、网上银行、网上书店等一系列在线电子商务服务系统。这些系统都离不开分布式的数据库、与用户及后台数据库交互的动态Web应用程序、安全认证等技术。因此在Internet/Intranet环境下如何构建分布式动态Web应用系统的开发自然而然地成为一项热门技术。
文中所介绍的服装(羊毛衫)远程定制系统,采用了基于J2EE / EJB的分布式应用体系结构和MVC开发模型,使分布在不同地理位置上的花型数据库、远程定制系统与远程诊断系统,通过Internet互连在一起,共享信息资源,实现羊毛衫的远程定制生产和电脑横机远程维护。
2 基于J2EE分布式开发技术简介
目前使用的分布式开发技术主要有以下几种C/S、C/A/S、B/A/S等。这几种技术共同点在于都可以实现数据的共享,对数据进行统一管理和维护。
分布式技术发展到现在,出现了许多相关的标准和产品。其中最为引人注目的就是SUN公司推出的J2EE / EJB的体系结构了。这是自SUN公司推出JAVA后的又一大手笔。Enterprise JavaBean这一名称利用了JavaBean这种可移植、可重用的Java软件组件的声望。Enterprise JavaBean技术把Java组件的概念从客户机域扩展到了服务器域,这是Java技术成长过程中有重大意义的一步,它使Java技术发展成为一种强健的、可伸缩的环境,能够支持以任务为关键的信息系统。下图是J2EE / EJB的分布式应用模型:
从图中可以看出,Servlet/JSP起着联系前后台的桥梁作用。客户端Browser通过HTTP协议向Java应用服务器发送请求。Web层的Servlet或JSP生成网页用来完成表示层逻辑,它们的主要作用是接受并检验用户输入,调用后端的业务逻辑层,并把业务逻辑层处理的结果返回给用户[2]。JSP和Servlet都运行在应用服务器端,业务逻辑层由EJB或JavaBean来实现,他们通过JDBC访问DBMS,或通过其它途径去访问遗留系统。
J2EE思想的一个重要的实现构架就是MVC(Model-View-Controller,模型-视图-控制器)模式。在MVC模型中,应用程序被分解成独立的3个部分:
2 模型:即程序将要实现的业务逻辑
2 视图:又称用户界面
2 控制:用来管理模型和视图之间交互以及应用程序的流程的构件
在这种设计模式下,JSP主要用来实现MVC模型的视图部分,Servlet用来实现模型的控制部分(控制用户输入和流程),JavaBean等后台Java技术则用来实现MVC的模型部分。这种模式比较适合控制逻辑较复杂的情况,如用户输入情况复杂或者程序流程复杂的情况。
在远程定制系统设计的具体实践中,在J2EE中间件应用服务器和数据库服务器的选取可考虑使用IBM的WebSphere和DB2的组合或BEA的WebLogic和ORACLE的组合,这两种方法是目前比较流行和性能较好的方法,在大型的系统中得到了广泛的使用。
3 (羊毛衫)远程定制系统的设计内容
本系统以大型电脑针织横机为基础,将羊毛衫销售商场的远程定制用户端计算机通过Internet网络与羊毛衫设计中心的Web服务器以及企业的大型电脑针织横机互连在一起,实现羊毛衫远程定制设计与生产。整个定制系统总体构造示意图如下:
2 花型数据库模块
羊毛衫花型设计中心通过基于Web的花型数据系统。可以定制或选择各种不同类型的花型,可对花型图案数据进行查询、编辑、修改、打印等。从摄像输入、图片扫描、或直接绘图取得花型图像转换成花型数据文件,羊毛衫生产企业也可以对花型数据库进行编辑修改。
2 远程定制模块
羊毛衫专卖商场采用基于Web的远程定制系统,共享花型设计中心资源。顾客可以在线浏览现有的羊毛衫产品或者根据自己喜好选择花型式样,品种和颜色等款式信息进行羊毛衫定制,向羊毛衫生产企业提交定制工艺单,并由系统提供模拟横机编织和试穿效果演示。
2 远程诊断模块
大型电脑针织横机制造与售后服务基地,通过基于Web的远程监测维护系统,将被监测的电脑针织横机运行状况,以页面形式显示到自己的计算机上,对远方的大型电脑针织横机进行远程监测、故障诊断、远程交谈、文件传输等。
系统设计采用SQL Server 2000数据库系统建立羊毛衫花型数据库,服务器操作系统为Windows 2000 server,远程定制和诊断模块的开发都采用基于J2EE的JSP / Servlet,JavaBean,JDBC的三层结构。J2EE应用服务器为BEA WebLogic6.1,Web服务器采用微软的IIS4.0。Borland Jbuilder6.0作为J2EE的开发工具。系统采用Browser / Web / DBMSServer三层结构作为总体结构设计的计算模式。此三层结构最大的优点是将用户界面、应用逻辑与数据管理三层分开,使得系统可以灵活多变地应付各种变化。
下面介绍基于MVC开发模型设计远程定制模块。
4 远程定制模块的具体实现
4.1 用JSP实现视图
由于JSP程序的特点,宜采用独立的JSP程序来实现不同的程序功能模块,或者说,用不同的JSP程序实现不同的程序页面。下图说明了模块的主要页面以及实现它们的JSP程序:
其中白色方框代表程序中显示给用户的页面,灰色方框代表程序后台实现的功能,箭头表示了页面之间的链接关系和功能调用关系。这样分立的实现比单一的程序结构更容易调试,也更容易维护。
4.2 用JavaBean实现模型
(1)业务实体
整个模块中存在着5个业务实体,为了实现系统的业务逻辑,需要定义如下的JavaBean(每个实体对应一个Bean):Catalog:羊毛衫分类目录;Product:羊毛衫产品信息;User: 用户信息,它包含了Order;Order定制工艺单,它包含了Item;Item:定制信息条目。
每个业务实体都具有若干主要功能操作(方法)。例如定制工艺单管理实体,它可以增加定制信息(addOrderItem方法)、删除定制信息(delOrderItem方法)、修改定制信息(setOrderItem方法)和清空所有定制信息(clearOrder方法)。
另外,为了使对数据库的访问得到统一的管理,将数据库访问的各个操作进行了封装,封装到一个Java类DBSQL中。这样,程序的数据库访问都可以通过这个类的方法来实现。经过这样的抽象以后,上层的Bean无需关心如何访问数据库,它只需要知道DBSQL类的接口就可以了;而DBSQL类只要保持接口不变,内部的实现可以任意改变,例如进行优化,并且不会影响到上层应用。
(2)JavaBean的定义
下面列出了实现用户实体Bean(User)属性和方法的部分程序,User Bean是一个按标准定义的JavaBean,它定义了以下一组属性:
public class User {
int UserID; 只读属性,标示登录用户的编号
String UserName; 可读可写属性,标示登录用户的姓名
String Password; 可读可写属性,标示登录用户的密码
boolean Login; 可读可写属性,标示用户是否登录成功
Order order; 只读属性,标示用户的定制工艺单对象,这个对象如果存在,它本身也是一个Bean,在Order类中定义
……
// checkUser方法用来检查用户登录信息。通过JDBC访问数据库,检查用户名称和口令是否正确,如果正确就把login属性设置为true,并为该用户创建一个定制工艺单对象保存在属性order中
……
db.openDB();
String strSQL = "select UserID from USER where Name='"+UserName+"' and Password='"+Password+"' and Type=0";
try {
ResultSet sqlRst = db.executeQuery(strSQL);
if (sqlRst.next()) {
Login = true;
UserID = sqlRst.getInt(1);
order = new Order();
} else {
Login = false;
order = null;
}
……
// orderPay方法用来实现定制工艺单提交。它获取定制工艺单中的款式定制信息,然后通过JDBC将工艺单信息增加到数据库的表中。该方法返回boolean值,标示定制工艺单提交是否成功
……
db.openDB();
try {
……
strSQL = "select OrderID from order where UserID="+(new Integer(UserID)).toString()+" and OrderCount="
+OrderCount+" and OrderTotal="+OrderTotal+" and OrderDate=Date() order by OrderID desc";
ResultSet sqlRst = db.executeQuery(strSQL); 取得当前定制款式的用户号
sqlRst.next();
String OID = sqlRst.getString(1);
sqlRst.close();
for(int i=0; i
String PID = (new Integer(anItem.getPID())).toString(); 定制款式号
String Price = (new Integer(anItem.getPrice())).toString(); 定制款式价格
String Qty = (new Integer(anItem.getQty())).toString(); 定制款式数量
strSQL = "insert into orderlist (OrderID,ProductID,Price,Qty) values ("
+OID+","+PID+","+Price+","+Qty+")"; 将定制工艺单信息添加到数据库中
sqlRet = db.executeUpdate(strSQL);
}
……
User Bean在程序中是作为session范围的Bean定义的。它在程序中的第一个用处是获取login的属性值,检查是否是登录会员的访问;第二个用处是在member.jsp程序中使用checkUser方法执行会员登录认证操作;第三个用处是在pay.jsp程序中使用orderPay方法执行定制工艺单提交操作。
4.3 用Servlet实现控制
(1)JSP / Servlet设计模型
JSP / Servlet设计模型的原理如下图所示:
用户浏览器发出的访问请求都发送到Servlet统一处理,Servlet解释请求信息,进行相应处理,如果需要同实现业务逻辑的模型部分交互则同相应的模型Bean交互。实现业务逻辑模型的Bean被称为“模型Bean”,它们封装了程序的业务逻辑,将后台的模型同前台的控制与视图分离开,如果业务逻辑比较复杂,“模型Bean”往往还需要同其他的后台系统交互,例如数据库,其他的EJB等等。最后,Servlet调用(通过forward或include机制)JSP程序显示相应的页面。
(2)使用JSP / Servlet设计模型实现页面调用
由于定制工艺单的管理比较复杂,包含多个功能,即需要根据用户的不同请求,进行不同的定制工艺单操作。因此采用Servlet类OrderServlet实现这个控制逻辑,而另外编写一个order.jsp程序,它就只需要完成调用页面各部分的显示程序显示管理页面内容就可以了,所有的根据用户请求进行定制工艺单管理操作的控制都在OrderServlet中实现,定制功能的业务逻辑则仍在实现定制工艺单实体的JavaBean中实现。
(3)编写部署描述文件
在使用WebLogic6.1对系统进行装配和部署时,需要在部署描述文件web.xml中将order.jsp映射到OrderServlet这个Servlet,这样,当在其他程序中访问order.jsp时,系统实际执行的是OrderServlet。
……
OrderServlet
OrderServlet
OrderServlet
/order.jsp
5 结束语
J2EE是一个比较成熟的分布式体系结构,只需按照其规范和对应的开发工具的文档来编写程序和配置容器就可以实现整个系统的标准化。实现整个远程定制系统的过程体现了使用J2EE体系结构编写分布式系统的许多优势:通过Session Bean封装业务逻辑,Entity Bean完成数据库的访问实现的系统分布式的组件编程;通过JSP定制标签库构成模板,实现页面内容和布局的分离。这个系统是全部利用JAVA编写,而像Servlet、JSP等也基本上遵循JAVA的语法,因此非常方便。
参考文献:
[1] 柳树春,廖孟扬,王思贤,徐振勤. Browser/Server模式管理信息系统的设计与实现[J]. 计算机工程与应用,2002.06
[2] 常晋义,沈健. 基于J2EE的电子商务网构建技术及应用[J]. 计算机应用研究,2002.04
[3] Nicholas Kassem and the Enterprise Team. Designing Enterprise Applications with the Java TM 2 Platform [J], Enterprise Edition Version 1.0.1 Final Release October 3.2000
[4] Khawar Zaman Ahmed,Cary E.Umrysh. Developing Enterprise Java Application with
J2EE and UML [M]. 2002,Pearson Education,California,120-160
[5] Michael Girdley,Rob Woollen,Sandra L. Emerson. J2EE Application and BEA WebLogic Server [M]. 2002,Prentice Hall PTR,American,1-36