基于SSH框架高校科研管理系统的研究与实现
2011-10-09陈小健宋承继
陈小健,宋承继
(陕西工业职业技术学院 陕西 咸阳 712000)
高校科研管理系统是高校科研管理工作的基础平台,它能够对科研工作产生的各类信息进行有效管理和对科研活动的全程跟踪。由于科研管理内容的广泛性,管理内容的具体化进一步加深,对高校科研管理系统开发的易维护性、安全性和扩展性等提出更高要求。使用SSH框架建立一个易于动态扩展、易于维护、易于控制,具有伸缩性的高校科研管理系统是一个非常合适的开发选择。
Struts架构实现了MVC设计模式,使代码结构化、条理化、便于维护,很好地实现了业务逻辑与用户界面的分离,将模型和视图从底层事务处理分割开来[1]。它提供了大量自定义标记库,可以在JSP页面中分离显示逻辑与静态HTML,使页面代码更清晰,可读性提高,从而简化J2EE的Web应用开发。但是,Struts框架主要是针对表示层设计的,对于逻辑层支持不是很强,并且ActionForms使用不便、无法进行单元测试。
Spring框架是一个松耦合的框架,框架的部分耦合度被设计为最小,成为企业级应用程序一站式的解决方案。同时,它也是模块化的框架,允许开发人员使用其中一部分的模块进行开发[2]。比如:开发者可以使用Bean容器加之Web层的Struts框架进行工作,也可以只使用Hibernate集成框架或JDBC抽象层进行工作。Hibernate框架只提供模型部分支持,如仅仅采用Hibernate架构开发应用系统,系统只会在业务模型部分有所改善,但是系统的逻辑处理、流程控制与视图并没有得到有效分离,因此系统的耦合性还是太高,不易于维护。
如果将以上三种框架进行有效整合,采用分层设计思想,并为各层次的支持提供一个整合框架,以隔离各层次间的依赖性,便于系统的扩展,使框架更加易用。
1 系统的功能与结构
1.1 系统功能设计
系统采用模块化设计,确保了系统的可扩展性,整个系统模块结构如图1所示。办公桌面模块主要实现系统的日常办公辅助;项目管理模块主要实现项目信息检索、项目年检、项目结题、项目申报活动;成果管理模块主要实现对科研活动产生的论文、专著、专利及相关鉴定证书进行统计和分析;人员管理模块主要实现对科研人员信息的管理和账户管理;系统管理模块主要实现系统运行日志和人员权限的管理。
图1 系统框架图Fig.1 Block diagram of system
1.2 系统框架设计
SSH组合框架的设计目标是:提供设计层次更加清晰,功能更加完善的Web框架;提高组件的可复用性,降低各层之间的耦合度,有利于系统的可维护和可扩展等。SSH组合框架三层分别是:用户表示层,逻辑业务层,数据持久层。每个层在软件功能结构中都有明确的责任,在功能上保持独立性,它们之间通过接口可以实现。SSH组合框架组合示意图如图2所示。
图2 SSH组合框架组合图Fig.2 Picture of SSH combinative framework
整个SSH框架的工作流程以J2EE架构为基础,表示层由Struts完成,提供丰富的标记库,管理用户的请求并做出相应的响应,提供一个控制器,调用相应的业务逻辑;而通过Spring框架同Struts框架的完美结合,事务管理和依赖注入能力主要应用在业务逻辑层;在数据持久层方面主要采用Hibernate,实现O/R Mapping,对JDBC进行了轻量级的对象封装,建立Java对象模型的持久对象[3]。
2 系统设计
2.1 数据持久层设计
数据持久层主要定义应用程序通过具体的类与数据库交互。持久层的设计将使用Facade模式(门面模式)定义系统中各个模块的业务入口MenuDAO、BaseDataDAO、BaseDataTypeDAO、UserDAO接口,并定义它的实现类Impl,通过接口得到具体业务的DAO实现。通过DAO和对应模块的公共信息类HibernateUtil,就能对数据库进行增删查改动作,如图3所示。
图3 持久层类图Fig.3 Picture of data persistence layer class
2.2 业务层设计
为了实现系统各层架构图,业务层的设计将定义各个模块对表示层的统一接口lmp,同时定义lmp接口的实现类Service。由于整个项目业务层设计较多,这里我们仅对系统维护模块的业务层设计进行介绍。该模块定义了接口Menu-Servicelmpl、BaseDataServicelmpl、BaseDataTypeServicelmpl、AuthViewServicelmpl,及其它的实现类 MenuService、BaseData-Service、BaseDataTypeService、AuthViewService, 图 4 描述该模块的类的静态结构及其类之间的关系。
图4 业务层类图Fig.4 Picture of business layer class
资源模块的BaseService都定义了相关的操作,包括:Query、Delete、Insert 等 。 同 时 定 义 MenuService、BaseData-Service、BaseDataTypeService、AuthViewService 接 口 将继承 域对象方法, 最后通过 MenuServicelmpl、BaseDataServicelmpl、BaseDataTypeServicelmpl、AuthViewServicelmpl 实 现 各 个 接口,完成业务层的服务支持。
2.3 表示层设计
系统表示层负责管理用户的请求和响应,并提供一个控制器将调用委托到业务逻辑和其他上游处理;将来自于其他层的例处理到Struts Action中;组装在视图中表现的模型对象。在对表示层的设计中,我们主要对Form的类框图和Action的类框图进行设计,如图5所示。
图5 表示层类图Fig.5 Picture of presentation layer class
由于BaseAction封装了控制层公共的信息,所有的Action类都通过继承BaseAction类,其他的Action类就不用考虑公共信息。LoginAction使用了 LoginForm,BaseDataQueryAction使 用 BaseDataQueryForm,InitAction使用InitForm,而3个Form都继承ActionForm组件对象,它们实现了对客户端的表单数据的良好封装和支持。在项目实施中,也可以使用动态FormBean(DynaActionForm)对表单数据封装。
3 系统实现
由于科研管理系统模块较多,各模块实现采用统一架构方式,文中通过用该架构来实现用户登录模块介绍该架构的实现细节。
3.1 系统实现平台
系统实现平台服务器操作系统采用Windows2003 Server版,客户机操作系统可采用Windows 2000/XP系列和IE6.0版本以上的浏览器,数据库系统采用Oracle 9i企业版,开发工具采用MyEclipse6.5+JDK1.6开发。MyEclipse6.5是稳定且功能强大的IDE开发工具,它提供了可视化的集成开发环境,支持最新的JDK版本,可以方便的开发Java应用程序,并能简化了集成Struts框架、Spring框架、Hibernate框架难度,应用服务器平台使用Tomcat 6.0,Tomcat是一款支持开源、免费、功能强大且运行可靠的Java应用服务器,用于构建中小型、多层和分布式的WEB应用。
3.2 数据持久层实现
1)实现POJO实现类
创建与表对应的POJO实现类,每个类就是一个具有Getter/Setter风格的 JavaBean。跟其它Bean不同的是,POJO实现类必须实现Serializable(序列化)接口,只有实现Serializable接口,POJO实现类才能持久化。
2)映射Hibernate持久化类
前面已经定义了POJO实现类,但POJO实现类还不能提供数据库访问支持。通过Hibernate映射文件的映射,Hibernate框架可以将面向对象的操作转换成对数据库表的操作。我们通过User.hbm.xml配置文件来映射User的属性和数据库表的字段关系。
3)建立 Hibernate配置
配置Hibernate的内容包括配置数据库、配置连接池和配置JDBC参数。Hibernate是JDBC的一个轻量级封装,底层还是JDBC来实现数据库访问,所以配置文件中还包括JDBC的配置。配置文件中重要的部分是映射文件,映射文件的作用是将值对象与数据库数据相绑定。hibernate.cfg.xml文件配置如下代码:
3.3 业务层实现
1)实现 UserDAO组件
要实现对数据库的操作,必须在具体的DAO中调用具体的操作, 比如 update,save,delete,query等。 由于所有的DAO都继承HibernateDaoSupport类,可以直接调用父类的方法,来实现对数据库的操作。在调用父类方法时,有时也需要作适当的逻辑判断,下边列出一个数据持久的基本实现。
2)管理 DAO组件
通过整合Spring框架,借助于SpringIoC容器的支持,Ioc容器充当DAO工厂,并让IoC容器将DAO组件注入业务逻辑组件,从而提供更好的解耦。为了让IoC容器能管理DAO组件,必须将所有的DAO组件配置在Spring的配置文件中,配置DAO组件比较简单,只需要为其注入SessionFactory实例即可。下面是DAO组件配置文件applicationContext.xml的部分代码:
3.4 表示层实现
1)控制层的实现
将Struts动作委托给Spring,以获得更好的动作管理。可以利用Spring的一个扩展点,使用扩展的RequestProcessor替换Struts的RequestProcessor。完成这个设置后,Struts会将截获到的用户请求转发到Spring Context下的bean,根据bean的name属性来匹配,Struts-config.xml的配置见如下代码:
2)模型层的实现
系统开发中使用动态FormBean(DynaActionForm)作为模型的实现。FormBean的产生是要提供数据给Action,在Action中可以取得FormBean中封装的数据,经相应的逻辑处理后,调用业务方法完成相应的业务要求。FormBean定义如下:
3)视图层的实现
在视图层采用Struts提供的Tiles标签来创建Web页面,使得网页的布局和内容分离。其定义在文件tiles-def.xml中,见如下代码:
4 结束语
随着科研管理对象的跨领域扩展,管理业务规则的复杂化和具体化,用户对软件系统的可扩展性、可维护性、系统安全性等提出更高的要求。SSH框架在科研管理系统开发中的应用研究不仅可以为系统提供非常优秀的体系结构,还可以极大提高系统的安全性,提高系统的开发效率,缩短项目的开发周期,降低项目开发风险,节约项目开发成本,提高产品的交付质量。同时,随着Struts、Spring、Hibernate框架的不断更新,基于SSH组合框架的研究是一个长期性的课题,将多种框架有效整合,取长补短,应用到实际的项目开发中,从而能够极大提高项目的开发效率和产品的质量,已经成为软件企业积极探索的重点。
[1]袁华强,王亚强,朱君.利用J2EE轻量级框架构建Web应用研究[J].计算机工程与设计,2007,28(3):22-23.
YUAN Hu-qiang,WANG Ya-qiang,ZHU Jun.J2EE lightweight framework construct web applications[J].Computer Engineering and Design,2007,28(3):22-23.
[2]李向东.基于SSH框架的项目申报系统的研究与实现[J].科技情报开发与经济,2008,18(24):149-150.
LI Xiang-dong.The research and implementation of project application system based on SSH framework[J].Sci-Tech Information Development&Economy,2008,18(24):149-150.
[3]郭广军,谢栋,陈利品.基于SSH整合架构的教学支持系统设计与实现[J].计算机工程与设计,2009,30(13):3111-3116.
GUO Guang-jun,XIE Dong,CHEN Li-ping.Design and implementation of teaching support system based on Struts-Spring-Hibernate integration architecture[J]. Computer Engineering and Design,2009,30(13):3111-3116.
[4]宋承继.基于SSH框架的人事劳资管理系统的研究与实现[D].上海:华东师范大学,2009.
[5]邓璐娟,孙义坤,刁海港,等.基于Struts+Spring+Hibernate的学生成绩管理系统的设计与实现 [J].郑州轻工业学院学报:自然科学版,2010,26(6):33-16.
DENG Lu-juan,SUN Yi-kun,DIAO Hai-gang,et al.Design and implement of student score management system based on Struts+Spring+Hiberante[J].Journal of Zhengzhou University of Light Industry:Natural Science,2010,26(6):33-16.
[6]沙先军,王爱平,魏博诚.基于SSH的渠道管理系统的设计与实现[J].微型计算机与应用,2011,30(4):89-92.
SHA Xian-jun,WANG Ai-ping,WEI Bo-cheng.Design and implementation of ssh-based channel management information system[J].Microcomputer&Its Applications,2011,30 (4):89-92.