当前位置:文档之家› 基于SSH架构的信息交流平台系统开发

基于SSH架构的信息交流平台系统开发

收稿日期:2011-01-10

作者简介:赵少卡(1980-),男,福建福州人,硕士,讲师。研究方向:软件工程。摘要:利用基于MVC 模式的Struts 框架、Spring IoC (控制反转)以及Hibernate 的ORM (对象关系映

射)机制和对持久对象持久化的管理技术设计信息交流平台系统,详细说明系统的具体实现,并对实现方法的可行性进行验证。

关键词:MVC ;Struts ;Spring ;Hibernate

中图分类号:TP311.52文献标志码:A 文章编号:1008-3421(2011)02-0008-06

《福建师范大学福清分校学报》JOURNAL OF FUQING BRANCH OF FUJIAN NORMAL UNI VE R S I TY 2011年第2期

总第104期Sum No.104

基于SSH 架构的信息交流平台系统开发

赵少卡

(福建师范大学福清分校数学与计算机科学系,福建福清350300)

1

引言

作为对经典的MVC (Model-View-Controller ,模型-视图-控制器)设计模式的一种具体实现,Struts 成为建立在当前Web 开发领域中JSP 、Servlet 、XML 等相关开发技术之上的一种主流的开发架构,是基于MVC 的经典设计模式框架;Hibernate 作为一项新兴的ORM 技术,把普通Java 对象映射到关系数据库表,并提供对对象的持久化操作;而借助于Spring IoC (控制反转)和AOP (面向方面编程),可以使得应用中对象的关系更加清晰、一致与可控。本文设计了一个整合Struts 、Spring 、Hibernate (简称SSH )技术的架构,并将其应用于信息交流平台系统(Information Communion Platform System ,ICPS )的开发与设计。

2ICPS 的设计

2.1系统简介

信息交流平台系统是采用B/S 模式的多层Web 应用系统,主要功能是为上网者提供一个信息交流的空间与平台。已登录的用户可以根据需要利用该系统发表文章,提出问题并表达观点,同时也可以查阅他人发表的文章和提出的问题,并进行回复、评论等。由此可见,本系统可能的用户有四种类型:系统管理员、版主、注册用户、未注册用户。

2.2框架设计

ICPS 整合Struts 、Spring 、Hibernate 框架,采用MVC 设计模式,将系统分为四层:表示层(Presentation Layer)、业务层(Business Layer )、持久层(Persistence Layer )、域模块层(Domain Model Layer )。表现层利用Struts 实现,业务层利用Spring 实现,持久层利用Hibernate 实现。

1表示层:该层主要负责接受用户的请求并做出响应。它接受用户的输入,将数据传递给业务层,并将业务层返回的处理结果以动态HTML 的形式呈现给用户。这一层的最佳实现模式就是MVC 模式,所以借助成熟的采用MVC 模式的Struts 来实现该层。Struts 主要在这一层负责为用户管理请求和响应;提供ActionFrom 来封装与用户互动的数据元素;提供控制器(controller )代理调用业务逻辑;处理从其他层抛出的Struts Action 异常等。

2业务层:通过该层,可以降低其与系统其他部分的耦合度。业务层通过Spring 的IoC 模式来装配业务组件,使系统更具扩展性。通过AOP 思想,来集中处理具体业务,使代码更为简洁,复用

第2期赵少卡:基于SSH 架构的信息交流平台系统开发性强,大大提高了开发效率。所以Spring 主要在这一层负责处理应用程序的业务逻辑、业务验证、管理事务、管理业务层对象之间的依赖并从表示层中提供一个上下文(context )给业务层获得业务服务(business services )以及管理从业务逻辑到持久层的实现。

3持久层:Hibernate 框架提供了对象-关系持久化(object-to-relational persistence )机制和查询服务。借助Hibernate ,利用其持久化机制和CRUD 封装来减少代码开发量和其他层次的耦合度。

4域模块层:ORM 用对象关联数据表,允许数据表中数据存入对象,也允许对象中数据更新到数据表,可以将这些对象的集合归为一个专门的层次即Domain Layer 。域对象承担各层之间数据通信的载体。

总之,表示层提供友好的用户交互;业务层处理具体问题领域逻辑;持久层完成与数据库读取存储;域模型承担数据传输的载体。通过上述分层,将一个复杂的应用领域细分成诸多最小单元,让各部分承担各自不同的职责,然后进行组合、串联,使得一个应用领域的实现过程中,最小的单元达到最大的复用。

2.3数据库设计

在ICPS 系统中,对于系统管理员密切相关的问题有:涉及到的版面的设计与管理问题;注册会员的管理问题;信息的管理问题等。与用户密切相关的问题有:如何方便地查阅到所需要的信息;可以对哪些信息进行回复;在大量的信息中如何找到精华信息或被推荐的信息;发布信息是否需要被审核、是否有限制等。

结合本系统的实际需求,可以划分出与系统相关的主要数据库表:如一级版区表(ICPS_BOARD )、二级版区表(ICPS_BOARDS )、投票表(ICPS_VOTE )、投票项目表(ICPS_VOTEITEM )等。

2.4模块设计

通过ICPS 系统的需求分析,可以将其功能划分为基本功能(用户使用)与管理功能(管理员使用)两大类,从而可以得到系统的模块体系图,如图2-1所示。

依据功能的使用者作为模块划分的依据,就可以形成ICPS 系统的用例图,如图2-2所示。此用例图反映了ICPS 系统的功能框架,即系统的各个部分已经确定,对于ICPS 系统来说,各个模块之间用一条主线串联起来,构建了完整的系统。联系各个模块的主线是使用者的权限,系统的每个功能都与相应的权限对应。

图2-1ICPS 的模块体系

图9

2011年3月

福建师范大学福清分校学报

10

图2-2ICPS的用例图

3ICPS的实现

3.1域模块层的实现

域模块层由业务对象组成,业务对象可以在各层之间移动并承担数据通讯的载体。在业务对象类内部定义一些和业务相关的私有属性字段,并对外提供公有的相应属性的set和get方法设置或访问其属性值。

3.2持久层的实现

ICPS系统使用Hibernate框架实现应用的持久层,封装访问数据库的实现细节,并向上层提供面向对象的数据访问API。

3.2.1O/R映射

Hibernate采用XML格式的文件来指定对象和关系数据之间的映射。在应用运行时,Hibernate 将根据该映射文件来生成各种SQL语句,实现数据的访问。

由于一级版区下面可以有一个或多个二级版区,所以Board和Boards是一对多的关联关系。在XML配置文件中分别用属性one-to-many和many-to-one表示这种关联关系。下面的两个配置文件Board.hbm.xml和Boards.hbm.xml的代码片段反映了关联的映射。

映射Board对象到数据库ICPS_BOARD表,映射文件Board.hbm.xml:

赵少卡:基于SSH架构的信息交流平台系统开发11第2期

映射Board对象到数据库ICPS_BOARDS表,映射文件Boards.hbm.xml:

Hibernate从配置文件中读取和数据库连接有关的信息。可以采用Java属性文件(采用键值对的形式)的格式来创建Hibernate配置文件hibernate.properties。

3.2.2DAO数据访问接口

ICPS系统涉及的每一个业务对象都映射到一张数据库表,为了完成业务对象的持久化,执行相应的操作,所以必须实现每一个对象的DAO类。为了今后功能扩展以及降低系统实现之间的相互依赖关系,创建了每一个对象DAO类的接口类IDAO。考虑到每一个对象DAO类所需完成功能的相似性,所以可以定义一个接口超类IBaseDao,用来封装通用的方法定义。

所有业务对象DAO类的接口类都继承自IBaseDao接口超类。由于在超类IBaseDao中定义了常规的大部分方法接口,对于每一个具体业务对象DAO类的接口类,只需根据需要定义部分接口即可。

3.2.3DAO数据访问实现

ICPS系统为了实现代码的最大复用和便于以后功能的变更,业务对象DAO都继承自BaseDAO。BaseDAO继承org.springframework.orm.hibernate.support.HibernateDaoSupport,可以通过这个类获得HibernateTemplate。HibernateTemplate能够对Session的创建、事务的启动、提交与回滚进行管理。BaseDAO同时实现上面定义的接口超类IBaseDao,IBaseDao中定义所有方法都在BaseDao类中实现。这些方法包括openSession()、getQuery()、add()、getByPk()、update()、delete()、find()等。

业务对象DAO封装了Hibernate的实现细节,提供访问接口供业务层调用。在完成了IBoardsDAO、IBaseDao和BaseDao实现的基础上,下面以BoardsDAO的实现为例来说明如何实现一个具体业务对象DAO。

BaseDao已完成了大部分通用功能的实现,BoardsDAO只需要继承它并实现本身特殊的功能需求即可,比如Boards的删除涉及到级联对象的删除。BoardsDAO需要实现IBoardsDAO的四个方法:findOrderByNum()、removeBoards()、getNextOrders()和getPostSumNum()。

//级联对象的删除

boards.getBoard().getBoards().remove(boards.getBoard().getId());

this.delete(boards);

……//略去其它代码

用Hibernate实现持久层,可以使操作变得相对简洁,使得所面对和所操作的都是具体的业务对象,而让Hibernate根据映射文件去完成和数据库表相关的工作,这也正体现了利用Hibernate来实现持久层具有很大的优势。

3.3业务层的实现

业务层用于处理来自表示层的请求、执行应用逻辑、对持久层的调用、对事务的处理、对异常的处理等。ICPS系统涉及到的业务逻辑类都是由系统的业务对象所决定,Spring框架负责把业务处理逻辑、所用到的业务处理对象和DAO紧密地联系起来,以便完成相应的业务处理任务。

3.3.1业务逻辑处理类的实现

业务逻辑处理类供表示层调用,以完成用户请求的相应业务逻辑处理。下面对BoardsService 类的部分业务方法实现的关键部分进行说明。

1定义DAO对象,用来获取相应的DAO操作

IBoardsDAO boardsDAO;

2011年3月

福建师范大学福清分校学报

12

IUserInfoService userInfoService;

……//略去其它定义

2属性的set和get方法定义,以便Spring以配置的方式注入其实现类

public IBoardsDAO getBoardsDAO(){};

public void setBoardsDAO(IBoardsDAO boardsDAO){};

……//略去其它set和get方法

3具体业务处理方法的实现:借助上述定义的业务对象,调用相应的DAO。如增加二级版区的方法addBoards(Boards boards),主要的实现代码为:getBoardsDAO().addBoards(boards);

……//略去其它处理逻辑

3.3.2配置Spring框架

Spring框架根据配置文件将对象和服务使用注入的方式相联系。Spring的配置文件是很多关于Bean的定义,包括数据源的配置,Service Beans的配置以及SessionFactory的配置等。

通过相应的操作,完成对数据源、SessionFactory、HibernateTransactionManager、HibernateInterceptor、Dao Beans及代理、Service Beans及事务代理等的配置。通过Spring AOP实现声明式事务管理,又通过Spring IoC实现以配置的方式创建注入对象。当在应用程序中通过WebApplicationContext按applications-service.xml配置的方式获取boardsService Bean时,Spring将会把boardsDAO,userInfoDAO 注入boardsService。

至此,借助于Spring IoC和Hibernate结合,实现了持久层与业务层的整合,把Business Service Object和DAO进行了组装,并把这些对象配入事务管理器(transaction manager)中。

3.4表示层的实现

ICPS系统表示层主要完成的是用户接口层功能的实现。将表示层再继续细分为View层,Model层与Controller层。

1View层:提供与用户交互的动态页面。主要负责接受用户数据的输入,借助Struts的标签库,将用户的输入存入ActionForm Bean中,以供Struts Action处理,并将处理结果返回显示。

2Model层:主要负责将View层传递过来的数据调用相应的业务处理逻辑进行处理,并将处理结果返回到View层。

3Controller层:主要负责接受用户请求并转发到相应的Action Bean进行处理,并根据处理的结果将不同的显示请求重定向到响应的JSP页面中进行显示。

3.4.1View层

View层由JSP实现,其中只包含标准的JSP标签、Struts标签(struts-bean.tld,struts-html.tld,struts-logic.tld)和JavaScript,不含任何的业务处理逻辑。

根据ICPS系统的需求,涉及到的JSP主要包括两类,一类针对用户的,另一类针对管理员。页面文件一般由四个部分组成:标签定义、页面title定义、javascript函数定义、表单Form定义。

3.4.2Model层

Model层使用Struts Action与ActionForm实现。本系统中的所有Action类都继承自BaseAction 类。在BaseAction类中,维持了一个WebApplicationContext对象,通过调用该对象的getBean方法,传入配置文件中的bean id,就可以定位到这个bean,也就是之前定义的业务层的各种服务,这体现了Spring IoC的机制。BaseAction类从WebApplicationContext通过Bean的依赖注入方式获取在Spring配置文件applications-service.xml中配置的业务层的处理逻辑Beans,供子类调用相应的服务。

每一个Action Bean都从父类BaseAction中获取Service Bean,接着调用Service Bean的相应

赵少卡:基于SSH架构的信息交流平台系统开发13第2期

方法实现真正的业务逻辑处理,并将处理后的结果返回View层,最后显示给用户。

3.4.3Controller层

一般地,可以通过Struts的org.apache.Struts.action.ActionServlet类实现Struts框架的控制器。控制器决定了从View层传来的用户请求分发给哪个Action Bean进行处理,或者可以将处理结果通过哪个JSP显示给用户。Controller层就像是View层和Model层之间的适配器,负责二者的正常运作。Struts框架应用中的控制器部分由ActionServlet和ActionMapping对象构成。ActionServlet对象负责接受用户请求,它在Web应用程序web.xml部署文件中配置。ActionMapping对象实现用户请求到Model层处理逻辑Action Beans之间的映射,这些关系映射在struts-config.xml配置文件中进行描述说明。

4总结

本论文以开发ICPS系统为出发点,采用目前流行的SSH开源框架技术,完成了对信息交流平台系统的具体实现。在设计中,将总体应用主要划分为表示层、业务层与持久层,解决了“表示”与“业务逻辑”分离、“业务逻辑”与“数据”分离问题:Struts只负责表示层,不涉及真正的业务逻辑处理,业务层由Spring实现。Spring主要负责对Hibernate的Session和事务的管理,利用Spring封装的Hibernate模板类,大大简化DAO类的编写。此外,利用Spring的IoC机制连接映射文件和类之间的关联、接口和实现类之间的关联等。持久层由Hibernate实现,主要负责对象和关系数据的映射。这样的设计方案大大提高了系统的可维护性、可重用性与可扩展性。

参考文献:

[1]孙卫琴.精通Hibernate:Java对象持久化技术详解(第2版)[M].北京:电子工业出版社,2010.

[2]ChristianBauer,Gavin King.Hibernate In Action.[EB/OL]https://www.doczj.com/doc/b210408794.html,/CMS/Pub/book/book_db/book_db_zh/ 2005_06_06_93138.htm,2005-06-06.

[3]Hibernate:Object/Relational Mapping and Object Persistence for Java.[EB/OL]https://www.doczj.com/doc/b210408794.html,.

[4]Spring系列:Spring框架简介.[EB/OL]https://www.doczj.com/doc/b210408794.html,/developerworks/cn/java/wa-spring1,2005-08-18.

[5]曹大有.基于Struts和Spring框架技术的Web应用的开发过程[J].计算机应用与软件,2008,25(8):203-204,211.

The Development of Information Communication Platform

System based on SSH Architecture

ZHAO Shaoka

(Fuqing Branch of Fujian Normal University,Fuqing,Fujian,350300)

Abstract:Information Communication Platform System is designed based on MVC,using Struts frame, Spring IOC technique,Hibernator's ORM mechanism and persistent management of persistent object. Moreover,the way of realizing the system by an instance is illustrated and its feasibility is validated. Key words:MVC,Struts,Spring,Hibernate

(责任编辑:海平)

相关主题
文本预览
相关文档 最新文档