基于SSH架构的信息交流平台系统开发_第1页
基于SSH架构的信息交流平台系统开发_第2页
基于SSH架构的信息交流平台系统开发_第3页
基于SSH架构的信息交流平台系统开发_第4页
基于SSH架构的信息交流平台系统开发_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于SSH架构的信息交流平台系统开发    收稿日期:2011-01-10作者简介:赵少卡(1980-),男,福建福州人,硕士,讲师。研究方向:软件工程。摘要:利用基于MVC 模式的Struts 框架、Spring IoC(控制反转)以及Hibernate 的ORM(对象关系映射)机制和对持久对象持久化的管理技术设计信息交流平台系统,详细说明系统的具体实现,并对实现方法的可行性进行验证。关键词:MVC;Struts;Spring;Hibernate中图分类号:TP311.52 文献标志码:A 文章编号:1008-3421(2011)02-0008-06福

2、建师范大学福清分校学报JOURNAL OF FUQING BRANCH OF FUJIAN NORMAL UNIVERSITY2011 年第2 期总第104 期Sum No.104基于SSH架构的信息交流平台系统开发赵少卡(福建师范大学福清分校数学与计算机科学系,福建福清350300)1 引言作为对经典的MVC(Model-View-Controller,模型-视图-控制器)设计模式的一种具体实现,Struts 成为建立在当前Web 开发领域中JSP、Servlet、XML 等相关开发技术之上的一种主流的开发架构,是基于MVC 的经典设计模式框架;Hibernate 作为一项新兴的ORM 技术

3、,把普通Java 对象映射到关系数据库表,并提供对对象的持久化操作;而借助于Spring IoC(控制反转)和AOP(面向方面编程),可以使得应用中对象的关系更加清晰、一致与可控。本文设计了一个整合Struts、Spring、Hibernate(简称SSH)技术的架构,并将其应用于信息交流平台系统(Information CommunionPlatform System,ICPS)的开发与设计。2 ICPS 的设计2.1 系统简介信息交流平台系统是采用B/S 模式的多层Web 应用系统,主要功能是为上网者提供一个信息交流的空间与平台。已登录的用户可以根据需要利用该系统发表文章,提出问题并表达观

4、点,同时也可以查阅他人发表的文章和提出的问题,并进行回复、评论等。由此可见,本系统可能的用户有四种类型:系统管理员、版主、注册用户、未注册用户。2.2 框架设计ICPS 整合Struts、Spring、Hibernate 框架,采用MVC 设计模式,将系统分为四层:表示层(Presentation Layer)、业务层(Business Layer)、持久层(Persistence Layer)、域模块层(Domain ModelLayer)。表现层利用Struts 实现,业务层利用Spring 实现,持久层利用Hibernate 实现。1 表示层:该层主要负责接受用户的请求并做出响应。它接受

5、用户的输入,将数据传递给业务层,并将业务层返回的处理结果以动态HTML 的形式呈现给用户。这一层的最佳实现模式就是MVC 模式,所以借助成熟的采用MVC 模式的Struts 来实现该层。Struts 主要在这一层负责为用户管理请求和响应;提供ActionFrom 来封装与用户互动的数据元素;提供控制器(controller)代理调用业务逻辑;处理从其他层抛出的Struts Action 异常等。2 业务层:通过该层,可以降低其与系统其他部分的耦合度。业务层通过Spring 的IoC 模式来装配业务组件,使系统更具扩展性。通过AOP 思想,来集中处理具体业务,使代码更为简洁,复用第2期赵少卡:基

6、于SSH 架构的信息交流平台系统开发性强,大大提高了开发效率。所以Spring 主要在这一层负责处理应用程序的业务逻辑、业务验证、管理事务、管理业务层对象之间的依赖并从表示层中提供一个上下文(context)给业务层获得业务服务(business services)以及管理从业务逻辑到持久层的实现。3 持久层: Hibernate 框架提供了对象关系持久化(object-to-relational persistence)机制和查询服务。借助Hibernate,利用其持久化机制和CRUD 封装来减少代码开发量和其他层次的耦合度。4 域模块层:ORM 用对象关联数据表,允许数据表中数据存入对象,

7、也允许对象中数据更新到数据表,可以将这些对象的集合归为一个专门的层次即Domain Layer。域对象承担各层之间数据通信的载体。总之,表示层提供友好的用户交互;业务层处理具体问题领域逻辑;持久层完成与数据库读取存储;域模型承担数据传输的载体。通过上述分层,将一个复杂的应用领域细分成诸多最小单元,让各部分承担各自不同的职责,然后进行组合、串联,使得一个应用领域的实现过程中,最小的单元达到最大的复用。2.3 数据库设计在ICPS 系统中,对于系统管理员密切相关的问题有:涉及到的版面的设计与管理问题;注册会员的管理问题;信息的管理问题等。与用户密切相关的问题有:如何方便地查阅到所需要的信息;可以对

8、哪些信息进行回复;在大量的信息中如何找到精华信息或被推荐的信息;发布信息是否需要被审核、是否有限制等。结合本系统的实际需求,可以划分出与系统相关的主要数据库表:如一级版区表(ICPS_BOARD)、二级版区表(ICPS_BOARDS)、投票表(ICPS_VOTE)、投票项目表(ICPS_VOTEITEM)等。2.4 模块设计通过ICPS 系统的需求分析,可以将其功能划分为基本功能(用户使用)与管理功能(管理员使用)两大类,从而可以得到系统的模块体系图,如图2-1 所示。依据功能的使用者作为模块划分的依据,就可以形成ICPS 系统的用例图,如图2-2 所示。此用例图反映了ICPS 系统的功能框架

9、,即系统的各个部分已经确定,对于ICPS 系统来说,各个模块之间用一条主线串联起来,构建了完整的系统。联系各个模块的主线是使用者的权限,系统的每个功能都与相应的权限对应。图2-1 ICPS 的模块体系图9福建师范大学福清分校学报2011年3 月图2-2 ICPS 的用例图3 ICPS 的实现3.1 域模块层的实现域模块层由业务对象组成,业务对象可以在各层之间移动并承担数据通讯的载体。在业务对象类内部定义一些和业务相关的私有属性字段,并对外提供公有的相应属性的set 和get 方法设置或访问其属性值。3.2 持久层的实现ICPS 系统使用Hibernate 框架实现应用的持久层,封装访问数据库的

10、实现细节,并向上层提供面向对象的数据访问API。3.2.1 O/R 映射Hibernate 采用XML 格式的文件来指定对象和关系数据之间的映射。在应用运行时,Hibernate将根据该映射文件来生成各种SQL 语句,实现数据的访问。由于一级版区下面可以有一个或多个二级版区,所以Board 和Boards 是一对多的关联关系。在XML 配置文件中分别用属性one-to-many 和many-to-one 表示这种关联关系。下面的两个配置文件Board.hbm.xml 和Boards.hbm.xml 的代码片段反映了关联的映射。映射Board 对象到数据库ICPS_BOARD 表,映射文件Boa

11、rd.hbm.xml:<map name="boards" inverse="true" cascade="all" order-by="Orders asc"><key column="BoardID"/><index column="ID" type="long"/><one-to-many class="com .icps.bo.Boards" /></map>10第2期

12、映射Board 对象到数据库ICPS_BOARDS 表,映射文件Boards.hbm.xml:<many-to-one name="board" class="com.icps.bo.Board" column="BoardID"/>Hibernate 从配置文件中读取和数据库连接有关的信息。可以采用Java 属性文件(采用键值对的形式)的格式来创建Hibernate 配置文件perties。3.2.2 DAO 数据访问接口ICPS 系统涉及的每一个业务对象都映射到一张数据库表,为了完成业务对象的

13、持久化,执行相应的操作,所以必须实现每一个对象的DAO 类。为了今后功能扩展以及降低系统实现之间的相互依赖关系,创建了每一个对象DAO 类的接口类IDAO。考虑到每一个对象DAO 类所需完成功能的相似性,所以可以定义一个接口超类IBaseDao,用来封装通用的方法定义。所     有业务对象DAO 类的接口类都继承自IBaseDao 接口超类。由于在超类IBaseDao 中定义了常规的大部分方法接口,对于每一个具体业务对象DAO 类的接口类,只需根据需要定义部分接口即可。3.2.3 DAO 数据访问实现ICPS 系统为了实现代码的最大复用和便于以后功能的

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

15、 )、find( )等。业务对象DAO 封装了Hibernate 的实现细节,提供访问接口供业务层调用。在完成了IBoardsDAO、IBaseDao 和BaseDao 实现的基础上,下面以BoardsDAO 的实现为例来说明如何实现一个具体业务对象DAO。BaseDao 已完成了大部分通用功能的实现,BoardsDAO 只需要继承它并实现本身特殊的功能需求即可,比如Boards 的删除涉及到级联对象的删除。BoardsDAO 需要实现IBoardsDAO 的四个方法:findOrderByNum( )、removeBoards( )、getNextOrders( )和getPostSumNu

16、m( )。/级联对象的删除boards.getBoard( ).getBoards( ).remove(boards.getBoard( ).getId( );this.delete(boards);/略去其它代码用Hibernate 实现持久层,可以使操作变得相对简洁,使得所面对和所操作的都是具体的业务对象,而让Hibernate 根据映射文件去完成和数据库表相关的工作,这也正体现了利用Hibernate 来实现持久层具有很大的优势。3.3 业务层的实现业务层用于处理来自表示层的请求、执行应用逻辑、对持久层的调用、对事务的处理、对异常的处理等。ICPS 系统涉及到的业务逻辑类都是由系统的业务

17、对象所决定,Spring 框架负责把业务处理逻辑、所用到的业务处理对象和DAO 紧密地联系起来,以便完成相应的业务处理任务。3.3.1 业务逻辑处理类的实现业务逻辑处理类供表示层调用,以完成用户请求的相应业务逻辑处理。下面对BoardsService类的部分业务方法实现的关键部分进行说明。1 定义DAO 对象,用来获取相应的DAO 操作IBoardsDAO boardsDAO;赵少卡:基于SSH 架构的信息交流平台系统开发11福建师范大学福清分校学报2011年3 月IUserInfoService userInfoService;/略去其它定义2 属性的set 和get 方法定义,以便Spri

18、ng 以配置的方式注入其实现类public IBoardsDAO getBoardsDAO( );public void setBoardsDAO(IBoardsDAO boardsDAO);/略去其它set 和get 方法3 具体业务处理方法的实现:借助上述定义的业务对象,调用相应的DAO。如增加二级版区的方法addBoards(Boards boards),主要的实现代码为:getBoardsDAO( ).addBoards(boards);/略去其它处理逻辑3.3.2 配置Spring 框架Spring 框架根据配置文件将对象和服务使用注入的方式相联系。Spring 的配置文件是很多关于

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

20、ce Bean时,Spring将会把boardsDAO,userInfoDAO注入boardsService。至此,借助于Spring IoC 和Hibernate 结合,实现了持久层与业务层的整合,把Business ServiceObject 和DAO 进行了组装,并把这些对象配入事务管理器(transaction manager)中。3.4 表示层的实现ICPS 系统表示层主要完成的是用户接口层功能的实现。将表示层再继续细分为View 层,Model 层与Controller 层。1 View 层:提供与用户交互的动态页面。主要负责接受用户数据的输入,借助Struts 的标签库,将用户的

21、输入存入ActionForm Bean 中,以供Struts Action 处理,并将处理结果返回显示。2 Model 层:主要负责将View 层传递过来的数据调用相应的业务处理逻辑进行处理,并将处理结果返回到View 层。3 Controller 层:主要负责接受用户请求并转发到相应的Action Bean 进行处理,并根据处理的结果将不同的显示请求重定向到响应的JSP 页面中进行显示。3.4.1 View 层View 层由JSP 实现,其中只包含标准的JSP 标签、Struts 标签(struts-bean.tld,struts-html.tld,struts-logic.tld)和Jav

22、aScript,不含任何的业务处理逻辑。根据ICPS 系统的需求,涉及到的JSP 主要包括两类,一类针对用户的,另一类针对管理员。页面文件一般由四个部分组成:标签定义、页面title 定义、javascript 函数定义、表单Form 定义。3.4.2 Model 层Model 层使用Struts Action 与ActionForm 实现。本系统中的所有Action 类都继承自BaseAction类。在BaseAction 类中,维持了一个WebApplicationContext 对象,通过调用该对象的getBean 方法,传入配置文件中的bean id,就可以定位到这个bean,也就是之

23、前定义的业务层的各种服务,这体现了Spring IoC 的机制。BaseAction 类从WebApplicationContext 通过Bean 的依赖注入方式获取在Spring 配置文件applications-service.xml 中配置的业务层的处理逻辑Beans,供子类调用相应的服务。每一个Action Bean 都从父类BaseAction 中获取Service Bean,接着调用Service Bean 的相应12第2期方法实现真正的业务逻辑处理,并将处理后的结果返回View 层,最后显示给用户。3.4.3 Controller 层一般地,可以通过Struts 的org.apa

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

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论