基于J2EE的网上购物配送管理系统设计.txt曾经拥有的不要忘记;不能得到的更要珍惜;属于自己的不要放弃;已经失去的留作回忆。收稿日期:2003-09-01。纪寿文,博士,主研领域:生产物流规划与
仿真,物流配送,AGVS等。
基于J2EE的网上购物配送管理系统设计
纪寿文 林晓宇
(清华大学深圳研究生院现代物流研究中心 深圳518057) 李克强 缪立新(清华大学汽车系 北京100084)
摘 要 本文采用J2EE技术设计了物流企业电子商务的在线购物和配送管理系统。文中详细介绍了系统的逻辑及功能结构、在
线购物模块和登录注册模块的流程及其J2EE设计方法、采用MVC模式设计控制模块的方法,并给出了核心流程代码。文中也简单
介绍了配送管理模块采用的CW算法。
关键词 J2EE 在线购物 物流配送 CW算法
THE DESIGN FOR WEB SHOPING AND DISTRIBUTING MANAGEMENT BASED ON J2EE Ji Shouwen Lin Xiaoyu
(Modern Logistics Research Center ofShenzhen Graduate School, Tsinghua University, Shenzhen518057)
Li Keqiang Miao Lixin
(Automobile Department, Tsinghua University,Beijing100084)
Abstract Web shopping and dirtributing system for logistics corporation electronic commerce is designed by using J2EE technology in the paper. The logistic and function structure,flow chart and designmethods based on J2EE ofweb shopping,entry and registermodules are introduced particular- ly.The designing method for control module by usingMVC mode is described,and the core flow code is given.The CW algorithm used in distributing management module is also introduced.
Keywords J2EE Web shopping Logistics distribution CW algorithm 1 引 言
电子商务的出现,极大地方便了最终消费者,使消费者不必 再跑到拥挤的商业街,一家一家地挑选自己所需的商品,而只要 坐在家里,在因特网上搜索、查看、挑选,就可以完成他们的购物 过程,这些就是所谓的在线购物[1]。
在线购物的成功主要取决于购物系统的功能完善和物流配 送系统的可靠运行。购物系统如果功能完善、验证可靠,使用方 便,则便于用户的浏览和购物。而用户在提交购物订单和支付 货款后,物流配送则成为实现在线购物最终成功的关键,物流配 送的核心问题则是配送车辆的调度。
本文面向企业的电子商务,将对在线购物系统和物流配送 系统统筹考虑,实现信息的共享和车辆的优化调度,为企业提供 了一个易于操作的低费用物流管理系统、基于先进的优化网络 技术的车辆调度以及配送系统。物配平台使得用户可以随时掌 握实时的物流信息并根据客户的要求远程调度产生最佳的配送 方案。
该系统的设计中完全采用了面向对象的技术,在实际开发
中采用大量的JAVA技术,例如Servlet、JSP、JavaBean、JDBC、EJB 等,是一套完全基于J2EE的最新技术体系,具有良好的可平台 无关性、可扩展性等[2]。
使用本在线购物系统,企业就可以拥有自己的网络商城,让 企业在技术方面花费最少,从而全力以赴进行货源开发和业务 经营,迅速地展开销售工作。在线商店具备普通商店的大多数 特点,同时又比普通商店具有投资小,运营时间长,无人职守等 特点。 2 系统结构
系统包含在线购物模块和物流配送模块,其中在线购物系 统的核心是购物车模块,物流配送系统的包含配送方式选择、配 送路线选择、配送管理等,核心是CW调度算法。两个模块通过 订单信息有机的集成为一个整体,如图1所示。 图1 集成系统结构 2·1系统逻辑结构
从逻辑上讲,本系统分为四个层次。分别为用户层、表现
层、业务处理层、数据资源层。详细分析了物流配送企业的需 求,设计系统的逻辑层次结构如图2所示。
2·2系统功能结构
适应现代电子商务快捷的需求,系统中传递的订单是电子
第21卷第3期 计算机应用与软件Vol·21,No·3
2004年3月 Computer Applications and Software Mar·,2004图2 化的。因此,根据使用对象的不同把集成系统划分为调度员、客 户、管理员三个大模块,如图3所示。给客户使用的就是所谓的 在线购物系统,而在服务器端使用系统的是调度员和管理员。 调度员主要进行车辆调度,也是一个相对的“用户”。管理员主 要进行客户管理、权限管理、地图信息管理等。 图3 集成系统功能模块图
3 在线购物子系统的设计与实现
3·1在线购物子系统的功能与流程
在线购物是一堆接口定义清晰的独立模块组成。 控制模块:它来分发请求到各个业务处理逻辑,屏幕跳 转控制,对应的组件处理。
登录和注册:登录和注册模块要求用户在访问某些页面 时必须登录。
购物车模块:购物车跟踪用户购物过程。
类别模块:根据用户查询需求提供一个货物类别视图。 客户模块:表示客户信息:地址,联系方式等。 各模块之间的信息流程如图4所示。 图4 在线购物子模块与信息流程图
3·2在线购物系统的数据库
采用SQL设计在线购物系统的数据库表,主要包括客户信
息表、货物信息表、订单信息表、订单细目表。是允许数据库访
系统逻辑结构图 问的WEB应用程序开发的非常重要的一部分,它将直接影响系 统的长期有效性和产品化程序。
客户信息表中存储了客户的所有信息。其中,customerID是 数据库系统自动生成的。addToMap和nodeID两字段是与另一 子系统GIS信息表相关联的,用来表示电子地图信息。 货物信息表描述了每种货物所具有的详细信息。除了货物 自身的信息,还有货物分类的有关信息。我们对货物进行二次 分类,分别用baseClass,subClass来描述货物所属的分类,便于查 询和管理。
3·3采用MVC模式设计与实现控制模块
MVC模式是通过将客户的请求导入单一的对象—控制器。 这个控制器随之处理所有的请求,决定下一个要显示的视图,并 且实现所有为保护系统而需要的安全请求。同时,控制器并不 处理商业逻辑,商业逻辑由专门的模型(MODEL)提供。如图5 所示。
图5 MVC模式
经过这样的处理,JSP页面主要起到表达的作用,而由
Servlet控制页面间的跳转,系统商业逻辑和数据由Model来提 供,可以是EJB或JavaBean。
在线购物系统中的ControlServlet就是一个控制器。接收客 户端响应,请求业务逻辑,最后指示跳转页面,如图6所示。 图6 在线购物系统MVC模式图
ControlServlet具体代码如下,限于篇幅,只列出与控制功能 相关的代码,并略去部分调用Model的代码。
在ControlServlet中由if条件语句来判断接收页面的请求, 执行相应逻辑,做出处理后,最后由gotoPage()方法跳转到相应 的页面。
pubilc class ControlServlet extends HttpServlet{
static final private String CONTENT TYPE=″text/html; charset=gb2312″;
SCBean scb=new SCBean();
public void init() throws ServletException{}
public void doGet(HttpServletRequest resuest,
HttpServletResponse response) throws ServletException; IOException{ doPost(request,response);} if(getPara.equals(″登录″)){
String lonName=ChineseCharSet.toByteString (request.getParameter(″logName″));
String password=ChineseCharSet.toByteString
(request.getParameter(″Password″));
DAOFactory SQLServerFactory=DAOFactory.getDAOFactory (DAOFactory.SQLSERVER);
CustomerDAO custDAO=SQLServerFactory.getCustomerDAO(); Customer cust=custDAO.findCustomer(longName);
if(cust !=null&&cust.getPassword().equals(password)){
gotoPage(″/goodsList.jsp″,request,response);
第3期 纪寿文等:基于J2EE的网上购物配送管理系统设计29 }else{ gotoPage(″/loginfailed.html″,request,response); }}
else if (getPara.equals(″注册″)){
gotoPage(″/register.jsp″,request,response);} else if (getPara.equals(″放入购物车″)){
gotoPage(″/shoppingCart.jsp″,request,response);} else if (getPara.equals(″删除″)){
gotoPage(″/shoppingCart.jsp″,request,response);} else if (getPara.equals(″查看购物车″)){
gotoPage(″/shoppingCart.jsp″,request,response);} else if (getPara.equals(″清空购物车″)){
gotoPage(″/shoppingCart.jsp″,request,response);} else if (getPara.equals(″提交订单″)){
gotoPage(″/shoppingCart.jsp″,request,response);} }
3·4购物车模块
购物车模块跟踪用户一次的购买过程。
购物车模块需求:
必须能够跟踪用户购买的货品内容(item)。购物车中的每
个item有唯一标示ID,此外,还有item归属的货物的ID,属于的 种类、名字和单品报价。
每个item必须和一个非负的数量有对应关系,客户可以增 删改和改变item数量,或者清空购物车。
购物车的设计:
购物车是和一个session关联的,因为,归属与某个用户,跨 越多个请求。设计的关键在于在哪里存放购物车的状态信息, 我们使用了有状态的session EJB。此外,使用EJB层存放这些状 态信息,客户端可以不用局限于WEB客户端。购物车的结构如 图7所示。
图7 购物车结构
图7是购物车模块的结构图,客户端使用ShoppingCartLo-
calHome来创建ShoppingCartLocal。ShoppingCartEJB这个bean中 包含了所有要求的操作。购物车ShoppingCartEJB包含了一个货 品内容的CartItem对象的Collection,这个CarrItem类是个普通的 可序列化远程传输的类。
购物车模块的实现:
购物车被实现成一个有状态的session EJB,里面包含一个 货品内容(item)的Collection。EJB同时提供出各种方法,来增删 改里面的内容,甚至清空。
EJB层的组件可以直接访问购物车EJB。WEB层维护一个
EJB层的控制器,这个控制器有个方法getShoppingClientFacade() 返回ShoppingClientFacadeLocal接口,这个接口的getShoppingCart ()方法返回当前用户的购物车session EJB引用。 4 车辆调度核心算法———CW算法与实现
CW算法由Clarke和Wright提出,该算法简单易用[3]。本文 将配送货物的体积约束引入CW算法在中,以改进的CW节约 启发式算法来进行车辆的优化调度。
4·1算法原理与求解步骤
假设以Cij表示车辆从点i行驶到点j的费用,可以得到点i 和点j连接在一条线路上的费用节约值。 s(i,j)=Ci0+C0j-Cij
若各项任务要求在一定的时间范围内完成,按费用节约值 s(i,j)连接点i和点j时,可能会使j后面的任务的执行不满足 时间要求。当连接点i和点j所在线路时,若车辆到达j点的时 间比原线路上j点任务的开始时间提前,则车辆在j后面的任务 处有可能需要等待;若连接后到达j点的时间比原线路上j点任 务的开始时间推迟,则j后面的任务在执行时可能会发生延迟。 以EFj表示连接点i和点j所在的线路后,车辆到达j点的 时间比原线路上车辆到达j点时间的推迟量(或提前量),则EFj 可如下得到:
EFj=si+Ti+tij-sj
显然,EFj<0时,车辆到达j点任务的时间提前;EFj=0时, 到达时间不变;EFj>0时,到达时间推迟。 其步骤如下:
①首先计算各个点i和点j之间线路的费用节约值s(i,j), 形成集合M,并按照从大到小对s(i,j)进行排序。其中: s(i,j)=ci0+c0j-cij
②若M为空,则终止叠代,否则对M中的第一项s(i,j)考 察是否满足下列条件之一,如满足则转下步,否则转⑥。 (a)点i和j均不在已构成的线路上;
(b)点i和j在已构成的线路上,但不与车场相连;
(c)点i和j位于已构成的不同线路上,均不与车场相连, 且一个是起点,一个是终点。
③考察点i和j连接后的线路上总货运量Q,若Q≤q,则转 下步,否则转⑥。
④计算连接点i和j所在的线路后,车辆到达j点的时间比 原路线上车辆到达j点的时间的变化量EFj:EFj=si+Ti+tij- sj。
(a)若EFj=0,转⑤;
(b)若EFj<0,则计算Δj-,当|EFj|≤Δj-,转⑤,否则转⑥; (c)若EFj>0,则计算Δj+,当|EFj|≤Δj+,转⑤,否则转⑥。 式中,Δj-为线路上j点后面的各任务处均不需要等待的到 达j点时间的最大允许提前量,其中:Δj-=min r≥j{Sr-ETr}。Δj+
为线路上j点后面的各任务不违反时间约束的到达j点时间的 最大允许推迟量,其中:Δj+=min r≥j{LTr-Sr}。
⑤连接点i和点j,计算车辆到达各任务时的新时间。 ⑥令M=M-s(i,j),转②。
4·2 CW算法类的设计
因为我们采用面向对象的程序设计语言java,在编码之前,
建立了面向对象的模型。ResultList、Task、ScheduleValueList、Item 这四个类都是辅助的类。ResultList用来存储计算结果;Task类 用来保存一些调度所需的数据;ScheduleValueList、Item都是计算 过程中的算法需要的中间数据。
30 计算机应用与软件2004年5 应用程序的部署 基于J2EE的web应用程序是一组Servlet、JSP页面、标记 库、HTML文档、图像、样式表以及其它WEB内容的集合。构成 应用程序的组件必须被打包在一起进行传输和部署。J2EE应 用程序中打包后的组件被存储在一个特定类型的JAR文件中, 这个JAR文件被称为企业应用程序归档或EAR(Enterprise
Archive)。同时J2EE应用程序还需要一些关于各个不同模块如 何关联以及部署环境的信息,这些信息被记录在一些被称为部 署描述符(DD)的XML文件里。图8显示了一个EAR文件的结 构。
图8 EAR的结构
部署描述文件web.xml是一个XML文件,包括如下内容: ServletContext初始化参数: Servlet/JSP定义; MIME类型映射; 错误处理页面; Session配置;
Servlet/JSP映射; 首页文件列表; 安全约束。
web应用部署描述文件web.xml应该放入主web应用目录
的WEB-INF子目录中,可以用来初始化Servlet、指定MIME(Mul- tipurpose Internet Mail Extensions)类型、指定J2EE资源等等。 参考文献
[1]梅绍祖、李伊松、鞠颂东,电子商务与物流,人民邮电出版社,2001·8· [2] Marci Frohock Garcia,Jamie Reding,EdWard Whalen,Steve Adrien Deluca 著,孙岩、黄波、张宁译,SQLServer 2000系统管理员宝典,北京:清华 大学出版社,2001·7·
[3]视崇隽、刘民、吴澄,“供应链中车辆路径问题的研究进展及前景”, 《计算机集成系统-CIMS》,2001,Vol.7(11):1~6· (上接第4页) 4 术语权重重构
获得查询q的TAGq查询集后,重新调整术语权重,构造新
的向量Q′。其基本思想是:给定一个查询方案,根据节点的路 径度,强化(strengthen)叶子节点权重,弱化(weaken)图TAGq中中 间节点的权重,从而优化用户查询的目的。
TWA(TermWeight Adjustment Algorithm,术语权重调整)算法: 输入:(1)术语关联图TAGq查询方案GQT;
(2)查询术语/权重集合Q={(q1,w1),?,(qn,wn)}。 输出:查询术语/权重集合Q′。 TWA算法:
1)构造空的术语/权重集合Q′=Φ。 2)计算每个节点的路径度: a)令GQT中所有节点的路径度为0;
b) for GQT中每条起始路径P=(t1,?,tk) do{
for i=1,2,...,k do path degree(ti)=path degree(ti)+1;} 3)对每个以t为叶子节点的起始路径P=(t1,?,tk,tk=t): a)修改t权重:Wt=Wt+Wti*l/path degree(ti)(1≤i c)修改Wti权重:Wti=Wti-Wti*l/path degree(ti),修改Q′ (由于同一个术语节点可能出现在多个起始路径中,可能会多次 修改该术语权重。): Q′=Q′U{(ti,witi)}; 4)输出Q′,算法结束。 例子3 设例子2对应的查询术语/初始权重见表1。通过 权重调整算法(令l=0.1),得到表1中不同查询方案的术语权 重。不同的查询方案使得术语A1,m1和A2,1的最终权重不同。 表1 查询术语/权重优化前后对照表 A1A2A3AnA1,m1A2,1A3,k3An,mnA1,1,1,k1 初始权重0·200 0·200 0·200 0·200 0·400 0·400 0·400 0·400 0·600 GQp1路径度1 1 1 1 2 0 1 1 3 权重0·197 0·197 0·180 0·190 0·387 0·000 0·410 0·410 0·629 GQp2路径度1 1 1 1 1 1 1 1 3 权重0·197 0·197 0·180 0·190 0·393 0·393 0·410 0·410 0·623 5 结 论 本文引入术语关联网络TAN概念,检查查询术语的可达关 系,建立术语关联图TAG,构成新的查询,接着利用术语权重调 整算法计算新的术语权重,形成基于术语关联的查询。本文贡 献之处在于利用TAN发现查询中存在的术语关联,并利用术语 关联重新计算术语权重,从而突出用户查询目的。 本文只研究了术语之间的isa联系来体现概念之间的泛化/ 细化联系。由于术语之间存在多种关联,各种关联的性质存在 较大差异。以后的研究内容主要分析可达术语之间的关联种类 和距离,对于不同的可达关联予以不同的考虑,如予以不同的权 重和伸缩因子等。 参考文献 [1] Panagiotis G.Ipeirotis,Luis Gravano,Mehran Sahami.Automatic classifica- tion of text database through query probing,WebDB 2000. [2] Luis Gravano,Hector Garcia-Molina,Anthony Tomasic,GLOSS:Text-Source Discovery over the Internet,Vol.24,No.2,June 1999,ACMTransactions on Database Systems. [3] Luis Gravano,Querying Multiple Document Collections across the Internet, 1997,PHD Thesis. [4] Ricardo Baeza-Yates,Berthier Ribeiro-Neto.Modern Information Retrieval, 1999,ACMPress. [5] Weiyi Meng,King-lup Liu,Clement Yu,et al,Estimating the Usefulness of Search Engines,International Conference of Data Engineering,1999. [6] J.Kleinberg.Authoritative Sources in a hyperlinked environment.In Proceed- ing of the 9thAnnual ACM-SIAM symposium on Discrete Algorithms,pp.668 ~677,January 1998. 第3期 纪寿文等:基于J2EE的网上购物配送管理系统设计31