kaiyun官方注册
您所在的位置: 首页> 其他> 业界动态> 基于J2EE的WAF框架在电子商务系统中的应用与扩展

基于J2EE的WAF框架在电子商务系统中的应用与扩展

2009-01-05
作者:杨文军,谢飞,王克宏

引言
WAF框架是Web Application Framework的简称,是在Sun Microsystems公司的J2EE蓝皮书中提出的一个J2EE应用框架。该框架演示了在J2EE的技术架构下如何进行MVC的设计,以及如何充分组合使用J2EE中的各种设计模式。同时在Sun Microsystems公司的网站上还给出了架构于WAF框架之上的网上宠物商店的演示例子。在本文笔者将首先介绍WAF框架的主要特点以及J2EE的设计模式在该框架内的应用;然后将结合具体的电子商务系统开发的经验讨论WAF框架的扩展。

WAF框架
WAF框架是一个包括视图层、控制层和数据层的综合性框架,该框架在Web层和EJ B层使用了较多的设计模式来降低各个模块之间的耦合性以及增加系统的扩展性。WAF框架的主要特点可以归纳如下:
1. 采用集中控制的方式处理请求
目前对于客户端的请求,可以采用多个Servlet进行分散的请求处理,也可以通过少数几个Servlet进行集中的控制。前一种方式在进行一些系统通用的事务处理(比如登录验证,权限认证,编码转换等)时,会造成代码的重复,从而增加了调试和维护的难度。而在WAF框架中通过集中的控制方式,可以对于系统的通用事务进行统一的处理,然后分发到各个模块进行特定的处理。
2. 外部配置页面流程
在WAF框架中,请求处理之后的页面流程都是通过外部文件来设定的,使开发者可以根据客户的不同需要很方便地更改页面的流程跳转,提高了系统的扩展性和维护性。
3. 统一逻辑调用接口
系统的逻辑处理分布在若干个EJB中,如果Web层直接去调用每一个EJB,会增加Web层和EJB层的耦合度,从而增加系统的维护的难度。而在WAF框架中,采用统一的逻辑调用接口,Web层的每一次请求都会通过这个逻辑调用接口再转到具体的某个EJB来处理。
4. 动态合成页面
WAF框架把一个完整页面分为几个特定的区域(banner区域,left-bar区域,body区域,right-bar区域和footer区域),每一个区域可以任意配置一个子页面,而整个页面就是由这些子页面配合构成。用户可以通过外部配置文件任意配置页面,子页面也可以得到很大的重用。
整个框架的流程如图【1】所示,WAF框架可以简单的划分为WEB层和EJB层。
WEB层的作用主要是从数据层获取数据(通过EJB或者JavaBean的方式提供)显示给用户,同时收集用户的请求信息,包装成数据对象后传递给数据层处理。
在WEB层,该框架使用Servlet2.3给出的过滤器机制来进行身份验证和安全控制。通过外部配置文件来指定不同角色的用户能够浏览的页面以及能够提交的请求,这样系统能够很方便管理用户角色以及控制用户权限,增加了系统的扩展性。
Web层定义了两个Servlet,其中的一个Servlet就是采用集中化的方式处理客户端的逻辑操作的请求(图【1】中标明的Front Control),而另外一个Servlet则处理客户端的页面请求(图【1】中标明的Template Servlet)。Front Control根护客户端的请求参数委托一个HTMLAction子对象构造一个针对该请求的数据传输对象(Event子类),然后传递请求给负责逻辑处理的EJB层,EJB层的处理结果将封装成EventResponse对象返回到WEB层, Front Control会根据返回的结果来决定提供给客户端的显示页面。从请求的类型到具体的HTMLAction对象的映射,以及从请求的类型和逻辑处理的返回结果到显示页面的映射,都是通过外部配置文件来指定的。系统能够把不同的请求映射到同一个HTMLAction对象进行处理,使HTMLAction对象得到复用,同时系统也可以很方便地为某个请求改变结果页面,使页面流程的控制能够灵活配置。
EJB层是真正进行逻辑处理和数据持久化的地方,Pet Store这个WAF框架的演示例子给出了通过实体Bean以及DAO的方式进行数据存取的方式。如果采用实体Bean的方式来获取大数据量的只读数据会因为构造过多的实体Bean对象而造成时间和空间上的浪费,而采用JDBC API直接从数据库获取大量的只读数据能够加快存取速度,同时减少内存中EJB对象的数目。在EJB层,WAF框架使用Session Fa?ade的设计模式,使所有Web层的请求都通过一个EJB Controller这个Session Bean来进行分发处理,这样使Web层与EJB之间的耦合度达到最小。

图【1】WAF框架流程控制

WAF框架在旅游电子商务系统中的扩展
笔者最近参与了一个电子商务系统的设计与开发,该系统就是基于WAF框架之上开发的。在整个设计过程中,我们发现为了迎合具体的电子商务系统的需求,我们需要对WAF框架进行一些改造和扩展,使其能够更好的满足这个电子商务系统的需求。
该电子商务系统对WAF框架的扩展主要表现在下面几个方面:
登录验证模块的扩展
在WAF框架中通过Servlet2.3的新特性Filter机制来实现用户身份的验证。如图【2】所示,在SignOnFilter里对用户请求进行过滤,该请求可以是一个页面请求也可以是一个逻辑操作的请求。如果是登录请求,则系统转到登录处理流程;而对于其他的请求,如果用户已经登录,则直接转到下一个Filter进行过滤,而如果用户未登录,则比较外部登录验证配置文件,验证用户请求是否属于受保护的请求(即只有已登录的用户发送该请求才能被系统处理),未通过验证系统将跳转到登录页面提示用户登录。
WAF框架中,只要是登录的用户就可以通过请求验证,而实际的电子商务系统都往往说,当用户登录后还需要验证用户是否有权限提交该请求(如图【3】所示)。而外部配置文件也需要根据不同的角色分别列出该角色能够提交的请求列表。

图【2】WAF框架的验证模块流程图

图【3】实际应用系统的验证模块流程图

控制流程的扩展
在WAF框架中,用途提交的页面请求(URI后缀为“.screen”)将被提交到Template Sevlet来进行处理,而如果用户提交的是操作请求(URI后缀为“.do”),那么该请求将通过前台控制器在HTMLAction子对象里包装成Event子对象,然后再把Event子对象提交到EJB层进行处理。这个处理过程有很大的一部分时间是用在来回的通讯上。而在实际系统中,并非所有的操作请求都需要通过EJB层进行处理,对于一些简单的请求在HTMLAction子对象里就可以完成。所以我们在实际系统中对WAF框架进行了改造,对于能够在HTMLAction子对象中进行处理的操作请求,则该子对象返回空的Event对象;而在前台控制器增加对返回的Event对象的判断,只有Event对象不为空才转到EJB层进行处理,否则直接跳转到下一个页面。
通过改变请求的处理流程,我们可以减轻EJB层逻辑处理的压力,同时降低了请求响应的时间,使WAF框架的效率得到提高。

页面流程模块的扩展
在实际系统中,我们希望成功处理一个用户的操作请求后,首先显示一个操作成功的提示页面,然后从这个提示页面自动转到一个指定的页面。我们希望这个提示页面能够得到复用,任何一个操作请求得到成功处理都能够使用该提示页面。而在WAF框架中,一个操作请求成功完成后就直接转到指定的页面,这个是通过外部配置文件mapping.xml来完成的。现在我们在这个外部配置文件中增加一个可选的中间过渡页面的设定,如果用户设定了这个中间过渡的页面,那么扩展WAF框架的系统能够把指定的后一个页面作为参数传给中间过渡页面,这样在这个过渡页面利用脚本语言经过一段间隔后就能够自动转到下一个指定的页面里。下面是mapping.xml的一个片断,粗体是增加的一个过渡页面的设定
com.xxx.j2ee.xxx.controller.web.actions.CancelOfferHTMLAction


总结与展望
WAF框架是一个覆盖WEB层和EJB层的综合性的框架,提供了很好的扩展性,因此能够满足对扩展性要求较高的商业系统的应用。随着J2EE1.4规范的推出,相信WAF框架也将把更先进的思想和设计理念融入其中,使其不仅是学习J2EE的很好的例子,同时在商业上得到更好的应用。

参考文献:
1. http://java.sun.com/blueprints/code/jps131/docs/index.html
2. Inderjeet Singh, Beth Stearns, Mark Johnson, and the Enterprise Team “Designing Enterprise Applications with the J2EETM Platform, Second Edition”
3. Java? 2 Platform Enterprise Edition Specification, v1.3

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map