首页 > 范文大全 > 正文

基于J2EE架构的五层Web开发模型研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于J2EE架构的五层Web开发模型研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:目前,多层Web体系结构普遍存在可重用程度低、维护工作繁琐、程序应变能力较弱等不足。因此,在开发Web应用系统的过程中,提高开发效率,合理选取技术进行分层设计、框架搭建,充分发挥应用系统的灵活性、安全性和实用性就尤为重要。对基于j2ee五层体系结构的Web开发框架进行了探讨;分析了基于Struts框架的J2EE架构中实现对象持久性的局限性;在业务逻辑层与持久层之间设计了多源数据访问组件,实现对不同类型、不同结构、不同环境、不同用法的异构数据库的统一访问。

关键词:J2EE;MVC;Struts;Hibernate;多源数据

中图分类号:TP202文献标识码:A文章编号:1672-3198(2008)03-0272-03

1 多层架构的Web开发框架模型

1.1 J2EE五层体系结构设计

随着web应用需要更复杂的表现和逻辑处理,J2EE提出了一种四层体系结构,分为客户层、WEB层、业务逻辑层、数据库层,应用的逻辑处理和表现的相分离,使得系统具有更为清晰的逻辑流程、功能代码复用性强、分布式部署。但是在大多数的实际项目应用中,数据层是关系型数据库,不能明确映射要实现的面向对象的机制,业务逻辑层与数据库交互的过程需要对数据库调用接口做进一步的封装,这在项目的开发和维护上会增加了一定的复杂性和管理的难度。一个有效的解决方案是把业务信息按照功能模块拆分开:业务逻辑与数据库访问分开,用户界面与业务逻辑分开,彼此相对独立,任一方的任何改变都不会影响对方,或者影响不大。因此本文提出在业务逻辑层和数据库层之间增加一个数据持久层,将四层体系扩展为如图1所示五层体系,即客户层、Web层、业务逻辑层、数据持久层和数据库层。数据持久层位于数据库之上,隐藏数据读取和操纵中的所有数据访问代码细节,将客户应用程序和底层存储机制隔离开,完全抽象出开发应用程序时使用的数据物理细节。

图1 基于J2EE的五层体系结构设计

业务逻辑层和数据层之间增加一个数据持久层,实现对象和关系数据库之间的映射。利用这个映射框架的机制,对象与关系数据库之间的转换就可以透明地进行,而不用去关心数据库连接、并发性、事务等问题。业务逻辑层直接获取或存储的是清晰的对象,中间的转换过程交给映射框架来处理。

在分层设计中,各层提供的接口是进行层间通信的基础,遵循的原则是实现严格的层间独立、分离,各层的实现细节不对外公开。分层设计图层间通信说明如下:

① 客户端与表示逻辑层通过 HTTP 协议通信,即通过 HttpRequest 和HttpResponse 分别接收用户输入和返回执行结果给用户。

② 表示逻辑层使用Struts框架技术实现,提供了接收/响应客户端请求,控制整个系统工作流程,通过调用Action 与业务逻辑层交互,以及格式化业务数据并动态生成WEB页面等功能。

③ 业务逻辑层与持久层的交互则是 JavaBean 对 Hibernate 的调用,通过数据访问对象 DAO 进行调用。

④ 持久层与数据库的通信是完全由 Hibernate 负责的,它把实体映射到数据库,对持久对象操作,并把缓存中的结果同步到数据库。

1.2 集成Struts框架与Hibernate框架实现MVC设计模式

Struts作为基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构,具有组件的模块化,灵活性和重用性的优点。但是Struts框架主要是针对表示层设计的,对于后端的业务逻辑层支持不是很强,在进行项目开发中存在着以下局限:

① 只能横向分工,按模块来划分工作,软件开发成本相应较高;

② 需要花很多时间在数据层的包装以及不同模块之间的协调和沟通,导致开发时间的增加;

③ 项目移植性相对较差,可能需要为不同数据库编写不同的SQL语句;

④ 项目扩展性相对较差,适应新的需求或变更时要修改数据库表结构,重新编写SQL语句,备份数据库等复杂操作,对人员要求也相应较高;

⑤ 由于开发人员数据库操作水平参差不齐,开发经验也不尽相同,导致系统性能可能会相对较差。

Hibernate 是一个开放源代码的 O/R Mapping (对象/关系映射) 框架,它对 JDBC 进行了轻量级的对象封装,以面向对象机制来处理数据库操作。Hibernate 不仅管理 Java 类到数据库表的映射,还提供数据查询和获取数据的方法,大幅度减少开发时人工使用 SQL 和 JDBC 处理数据的时间。

笔者认为应该将Hibernate集成到J2EE架构中,从struts框架中分离出对象持久性相关部分,交给Hibernate来实现。根据Struts的体系结构,数据库操作工作是由模型层负责处理的,因此可以将Struts中的模型层分成两部分,一部分负责业务逻辑,一部分使用Hibernate实现对象持久性处理。同时分离出具体业务逻辑,新建一个业务逻辑层,专门负责用Hibernate来实现业务逻辑和持久性对象的交互。

图2显示了集成Struts和Hibernate的 MVC 模型。Struts和Hibernate框架的整合实现了控制流、业务调用、表示这三者的分离,使系统在开发效率、可维护性、可扩展性方面都有良好的改进。在本模型中,客户层可以看做是V,它是由浏览器显示给用户的 DHTML 界面;业务逻辑层和持久层

则为 M,它是系统的核心部分,由 JavaBeans 和 Hibernate 组成;Web 层对应 C,它控制用户对业务逻辑的操作,同时控制把操作结果显示给用户,由 Servlet 和 JSP 程序组成。其中 PO 是调用模型层产生的持久对象,通过 JSP 页面显示给用户。

图2 集成Struts和Hibernate的 MVC 模型图

1.3 集成Struts和Hibernate实现J2EE分层架构

根据前面的分析,将Struts框架与Hibernate框架进行集成,构成了一个新的Web应用的开发框架,实现了J2EE应用系统的多层架构。该框架一方面继承Struts框架在表示层的优点,提供完善的标记库,负责页面请求的接收和转发,实现了表示逻辑和业务逻辑的分离;一方面在数据持久层等方面发挥Hibernate框架的特点,由Hibernate框架实现持久层和事务的封装,实现了业务逻辑与数据库访问分开。这样形成一个层次清楚、更加简洁、功能更加完善的Web框架,降低各个层次之间的耦合,提高组件的可重用性,减少在代码编辑方面的复杂性,有利于开发人员将注意力集中在业务逻辑的实现上,有利于系统的可维护性等。

集成Struts和Hibernate实现J2EE分层架构如图3所示,系统采用的五层结构设计,由客户层、Web层、业务逻辑层、数据持久层、数据库层组成。客户层运行在用户计算机的Web浏览器中;Web层运行在Web服务器中,它使用Struts框架技术实现,提供了接收/响应客户端请求,控制整个系统工作流程,与业务逻辑层交互,以及格式化业务数据并动态生成Web页面等功能;业务逻辑层负责实现整个系统的核心业务逻辑,由JavaBeans或EJB来实现;数据持久层使用Hibernate框架技术实现,完成对象和关系的映射,负责对数据库进行操作。

图3 集成Struts和Hibernate实现J2EE分层架构

下面根据图3对系统的各分层功能进行简单分析。

(1)客户层: 是用户用浏览器看到并直接与系统交互的层,主要是由 HTML 语言形成的网页界面。

(2)Web层: 它从客户层获得客户的输入,传递给业务逻辑层的组件,再把从业务逻辑层获得的处理结果以 HTML 文件的形式输出到客户端,形成网页界面。Web层由 Servlet 和 JSP 程序组成,封装在Web 容器中。而业务流程控制一般都由控制器Servlet来开发,响应用户的查询等请求并调用业务逻辑层的JavaBean来实现复杂的商务逻辑。

(3)业务逻辑层: 处理表示逻辑层传递过来的用户响应,并将结果返回给客户层。业务逻辑层封装了系统提供给用户的接口,是直接处理用户请求的中心。这一层主要由JavaBean来实现。JavaBean的主要任务是处理商务逻辑,与客户端交互,返回给它相应的操作结果等。

(4)数据持久层:它完成持久对象到关系数据库的映射,并对持久对象进行操作。业务逻辑模块由Hibernate通过0/R映射文件实现对具体数据源的操作(即穿过持久层映射到具体的某个数据表),完成对数据库的操作。对于小型的项目来说,这种实现确实是很高效的、低成本的。因为用这种方式,不需要添加含有EJB容器的应用服务器,只需要一台WEB服务器就可以让系统正常运行。

(5)数据库层:对象持久性的具体实现,可以是关系数据库管理系统、文件存储和对象数据库存储管理系统。

2 多源数据整合模型设计

目前的企业级应用系统普遍存在着在整体上缺乏统一性,分散的信息资源导致实现数据共享非常困难等问题。这些针对于不同业务独立开发的数据管理系统虽然能够满足业务数据存储和管理要求,但在许多情况下,为做出一个决策,可能需要访问分布在网络不同位置上的多个业务数据管理系统中的数据。因此,整合分散的信息资源就显得非常重要,通过对原有的多个相对独立的应用系统进行整合,消除原来存在的“信息孤岛”现象,实现数据共享并且消除数据冗余,实现企业内部信息资源一体化,为企业综合应用系统提供集成的、统一的、安全的、快捷的信息查询、数据挖掘和决策支持服务。

2.1 多源数据整合策略

Hibernate使用数据库配置文件来为应用程序提供持久化服务(持久化的对象)。Hibernate在Java程序与数据库之间进行转换,通过Hibernate访问数据库时,底层数据库使用的数据类型对Java应用程序是透明的。JDBC驱动程序对底层数据库使用的SQL类型进行了封装,向上提供标准SQL类型接口,使得Hibernate可以使用标准SQL类型来生成DML(Data Manipulation Language)。系统时,根据不同的数据源,定义不同的Hibernate配置文件,就能访问不同的数据库,实现多源数据的整合。

2.2 多源数据对象映射

(1)定义。根据需要整合的应用系统业务领域及范围确定数据整合的数据源和数据对象。

定义1:数据源A为一个相对完备的数据集合,他是由若干数据对象B组成,也就是有,A={B1,B2,......Bm}。一个数据源在实践中可以是一个独立的数据库。

定义2:设B为数据源A中的一个数据对象,B有若干数据元素组成,也就是有,B={b1,b2,...... bn},数据对象在数据源中可以是数据库中的表和视图。

(2)数据映射规则。

从需要整合的数据源到Hibernate的持久化数据类的集合之间建立以下映射规则:

规则1:对于一个数据源A,则在Hibernate中创建一个与之对应的会话配置文件,在会话配置文件中指明该数据源对应的数据库,如:hibernate.Acfg.xml。

规则2:对于数据源A中每个数据对象B,则创建一个与之相对应的数据持久化类C,并且为每一个数据持久化类C与数据对象B配置一个相应的映射文件D,其中B的每一个数据元素对应C的一个类属性。

参考文献

[1]方巍,孙涌,张书奎.整合Struts和Hibernate的Web系统应用[J].计算机与现代化,2005,(12):39-41

[2]宋秀琴,侯殿昆,方中纯.基于Struts和Hibernate的Web应用的构建[J].网络与通信,2005,21(3):125-127.

[3]朱庆红,吴宇红.一种对象/关系映射框架的分析和应用[J].电子科技,2004,(1):54-60.

[4]高昂,卫文学. 基于Hibernate与Struts框架的数据持久化应用研究[J].计算机应用,2005,25(12):31-35.

[5]谢艳平,胡家宝,谢承旺.基于Struts和Hibernate的MVC设计模式[J].交通与计算机,2005,23(4):62-64.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。