欧阳宏基 葛萌 王丽丽
摘 要:为了提高高等院校科研工作的效率,便于科研数据的统计与共享,提出了基于ESMSH框架的科研管理系统的实现方法。利用Easy UI构建表示层,通过Spring MVC实现控制层,利用Spring整合Spring MVC和Hibernate,利用Hibernate实现数据持久层。分析了架构的执行流程,阐述了系统实现的关键技术。实践表明,ESMSH框架通过清晰的分层结构和松散的耦合,使系统具有较高的重用性和扩展性。
关键词:科研管理系统;Easy UI;Spring MVC;Spring;Hibernate
中图分类号:TP311 文献标识码:A
Design and Implementation of Scientific Research
Management System Based on ESMSH Framework
OUYANG Hong-ji?覮,GE Meng,WANG Li-li
(Computer College,Xianyang Normal University,Xianyang,Shaanxi 712000,China)
Abstract:In order to improve the efficiency of scientific research work in colleges and universities,and also facilitating the statistics and sharing of scientific research data,the paper puts forward the implementation method of scientific research management system based on ESMSH framework. it using Easy UI to construct representation layer,using Spring MVC to construct controller layer,using Spring to integrate the Spring MVC and Hibernate.It analysis the execution process of the architecture and expoundes the key technologies of the system implementation. Practice shows that ESMSH framework lets the system has high reusability and expansibility through clear hierarchical structure and loose coupling.
Key words:scientific research management system;Easy UI;Spring MVC;Spring;Hibernate
高校的科研活动和科研能力是高校综合实力的重要衡量指标,实现科研工作的信息化管理是高校数字化校园建设的重要内容之一[1]。目前高校科研管理工作主要采取两种方式[2]:一种是手工处理,通过Excel、word 等办公软件或者简单的数据库采集系统来处理数据,此种方式对于学科门类多、科研项目与成果转化数量多的高校而言,不仅给科研管理人员带来繁重的工作量,并且造成科研管理人员和科研工作人员之间缺少必要和及时的沟通,导致信息在不同部门之间传递时失真且速度慢,最终难以反应本校科研工作真实情况。另一种是采用IT手段进行科研信息的管理,但是此种方式的科研项目管理系统多依赖固定的管理模式和各高校自己的业务管理方式,不具有灵活性、通用性和复用性。因此一套易于扩展、复用和灵活的科研管理系统对于解决科研管理工作的难题、提高工作效率就显得非常重要。
提出了一种基于B/S架构的、符合Java EE规范的轻量级应用开发方案来进行科研管理系统的设计。该方案主要是利用目前业界流行的Spring MVC、Spring、Hibernate三大框架進行架构设计与实现。相对于传统的基于EJB的Java EE开发方案,本方案具有以下特点:(1) 框架都是开源的,开发成本较低;(3)对应用服务器的依赖程度低,面向POJO的实现方式,使测试变得容易;(3)每个框架都是Java EE分层模式中某个具体层面的最佳实践,利用Spring作为“桥梁”能够无缝集成Spring MVC和Hibernate。(4)具有良好的扩展性、复用性和维护性。
1 系统总体设计
1.1 系统分析
通过对高等院校内部科研工作详细的需求分析,依据实际工作情况,对其业务进行全方位的跟踪分析,确定科研管理系统由:“项目管理”、“成果管理”、“人员管理”、“系统管理”、“信息公告”、“统计报表”等6大模块。系统的角色包括:管理员、评审专家、校领导、二级学院领导、二级学院科研秘书、科研人员、项目组成员。通过系统能够使项目申报、评审、立项、执行过程跟踪、科研数据统计分析等流程自动化,实现科研管理工作的公平、公正性。部分角色的用例如图1所示。
图1 科研管理中的核心角色与用例
1.2 系统功能及用例
项目管理模块包括:项目的添加、修改、删除、审核、进度安排、结题等操作。科研成果管理包括论文、著作、获奖、专利等管理。系统支持期刊库的管理,教师录入论文的期刊名称时能自动匹配该期刊当年的级别,方便对论文进行积分统计。人员管理包括科研人员、评审专家、项目组成员的管理,权限、角色的分配。系统管理包括基础数据的初始化、数据库的备份和恢复、将当前数据库数据导出为其他数据库兼容的数据格式以及日志信息的管理。信息公告包括信息的发布、显示、项目申报截止日期的设置等。统计报表包括对模块按查询数据的显示与打印。
2 基于SMSH框架的系统架构
2.1 架构模型
以MVC模式[3]为基础,整合轻量级框架Spring MVC、Spring和Hibernate,将输入、处理、输出流程按照视图、控制、模型的方式进行分离,实现了表示层与控制层、业务逻辑接口与实现、DAO接口与实现、持久化对象与数据库之间的解耦合,所形成的架构如图2所示。其中,视图部分由JSP页面和Easy UI框架构成。Spring MVC充当控制功能,通过URL的映射规则将模型与视图关联起来,共同完成用户请求。模型包括业务逻辑和数据持久化两部分,由Spring、Hibernate以及领域模型对象共同完成。领域模型对象负责业务流程、状态的处理、业务
图2 基于MVC和SMSH框架的系统架构
规则的制定以及封装不同层之间需要传递的数据等。Spring的IOC容器来管理领域模型对象及其之间的依赖关系[4],利用AOP方式将业务逻辑中的公共部分封装成单独的切面,用来实现权限验证、事务管理、日志记录等操作,有效地降低了应用组件之间的依赖性和应用程序各层的耦合度。持久化业务由Hibernate和DAO模式完成,DAO接口定义持久化对象的数据库操作,DAO实现类依赖Hibernate API和映射文件实现持久化对象与数据库的交互。
2.2 架构执行流程
架构的执行流程如下:
(1)客户端通过视图页面输入数据并向Web服务器发送HTTP请求。
(2)请求经过一系列的过滤器过滤后,由FilterDispatcher根据映射信息转发到某个具体的Controller。
(3)Controller中的方法调用业务逻辑接口,业务逻辑接口的实现对象通过Spring IOC获取。业务逻辑接口实现了控制层与业务逻辑层的解耦。
(4)业务逻辑接口的实现通过其依赖的BO对象完成具体的业务逻辑任务。业务逻辑接口的实现类和BO类需要通过Spring的配置文件或注解方式定义,将各自对象及其依赖关系 纳入Spirng IOC管理。
(5)业务逻辑的实现类通过调用DAO接口将业务计算结果中需要保存到数据库中的部分进行持久化操作。DAO模式将业务逻辑中持久化部分与非持久化部分解耦,使得具体持久化方式不会影响业务逻辑层的执行。DAO的实现类需要配纳入Spring的IOC管理。
(6)DAO实现类封装Hibernate的API来完成持久化对象与数据库表的ORM映射。并利用Spring的AOP对事务进行管理。
(7)DAO的执行结果通过业务逻辑层返回给Controller,Controller根据结果来选择某个视图响应请求,从而完成一个客户端与服务器的交互过程。
3 系统实现的关键技术
3.1 SMSH 架构的整合
SMSH架构整合的思路是:以Spring为核心,向下整合Hibernate完成数据持久化操作;向上整合Spring MVC完成控制逻辑,分离数据显示与业务处理。本文采用XML配置文件+注解的方式进行框架整合和系统开发,其中基础配置部分采用XML文件,包括Spring MVC、Spring、Hibernate的核心配置文件以及持久化类的映射文件。开发部分中的依赖关系采用注解,依赖关系体现在业务逻辑层对持久层的依赖、控制层对业务逻辑层的依赖。
Spring与Hibernate整合的具体步骤是:首先,定义Hibernate配置文件-hibernate.config.xml,完成SessionFactory的配置。配置项主要包括数据库方言、SQL语句显示、数据库表结构生成策略、批量更新数目、批量获取数目、查询缓存、二级缓存和加载实体类映射文件等。然后,定义Spring配置文件applicationContext.xml,完成对Hibernate框架中SessionFactory对象的配置,具体包括加载hibernate.config.xml文件、创建C3P0数据库连接池对象。
最后,在applicationContext.xml中创建声明式事务管理器并注入所依赖的SessionFactory对象。
由于Spring MVC是Spring框架的一部分,所以Spring与Spring MVC整合只需定义spring-mvc.xml配置文件即可[5]。首先,定义自动扫描包,将注解定义的控制层组件纳入IoC容器。然后,配置注解的处理器映射器和处理器适配器,配置内部视图解析器对模型视图名称添加前缀和后缀。最后,配置文件上传解析器。
3.2 控制器的实现
控制器(Controller)接受DispatcherServlet分配的任务,接收请求参数、调用Service组件执行业务逻辑并返回逻辑视图数据。本文将Controller当作POJO对待,采用“非侵入+注解”的方式来实现[6]。在控制器类定义前添加@Controller,让Spring把它当作控制器,通过@Autowired标识控制器所依赖的Service组件,在控制器的方法前添加@RequestMapping实现请求URL与控制器方法的映射;定义@RequestBody表示将请求的JSON格式数据转換成控制器方法的形参数据类型;定义@ResponseBody表示将控制器方法返回值的数据转换成JSON数据格式进行响应。
3.3 Service的实现
Service实现系统核心业务逻辑,包括Service接口和实现类两部分。Service接口定义业务逻辑方法,向控制器提供调用接口;Service接口实现类依赖业务对象完成业务处理与数据计算,调用DAO组件完成持久化逻辑,如图3所示[7]。
图3 业务层类图关系
以下项目管理模块对应的Service实现类的部分源码,其中利用@Service标识该类为Service组件,利用@Transactional表示该类相关方法使用事务,通过@Resource定义所依赖的Service和DAO组件。其中主要的业务方法包括:按年份、院系计算项目得分、按项目级别查询项目信息、按院系、年份查询申报的项目以及结题的项目信息、按主持人查询项目、按参与人查询项目等。
@Transactional
@Service(“scientificProjectService”)
public class ScientificProjectServiceImp extends BaseService
implements ScientificProjectService {
@Resource
private ScientificProjectDao scientificProjectDao;
@Resource
private AchieveIndexThreeDao achieveThreeDao;
@Resource
private TaskDetailService taskDetailService;
@Resource
private AchieveFinishDetailService achieveDetailService;
……………………
int getProjectsCountByDep(int depId);
int getProjectCountByLevel(int levelId);
long getProjectCountByDepAndLevel(Long depId,int levelId);
ArrayList
float getProjectScore(int depId,int year);
………
3.4 DAO的实现
DAO完成实体类与数据表之间的映射,每个实体类都有对应的DAO接口和DAO实现类,DAO接口中封装该实体类的持久化逻辑并作为业务逻辑层的访问入口,DAO实现类封装Hibernate API具体实现持久化逻辑。设计了如图4所示的DAO类图关系(以项目实体为例),其中BaseDao是用泛型技术所定义的实体类DAO的父接口,其中定义了每个实体类都具有的CRUD操作;BaseDaoImp是BaseDao的实现类,通过由Spring所注入的SessionFactory获取Hibernate的Session对象完成对数据库的操作;HQLQueryUtil类根据Where子句、From子句、OrderBy子句和查询参数等生成HQL语句并封装分页查询所对应的实体对象集合;ProjectDao是项目实体类对应的DAO接口,其中定义了项目实体所特有的持久化方法;ProjectDaoImp是项目实体的DAO实现类。
图4 持久层逻辑结构
3.5 领域模型的实现
领域模型根据实际业务需求由Java的各类业务对象组成,包括持久化对象(Persistence Object,PO)、业务对象(Business Object,BO)、值對象(Value Object,VO)、角色、权限、日志等。其中PO为持久层封装被持久化的数据,BO为业务领域相关对象之间提供面向对象的表现,VO封装不同层之间需要传递的数据。角色对象将用户对象和权限对象分离,便于为不同类型的用户分配不同的权限。日志对象记录用户操作系统的痕迹。
3.6 表示层的实现
表示层主要负责前端页面的展示、接收用户的输入数据、发送请求到控制器以及显示请求的响应结果。首先,创建JSP页面通过Script标签引入Easy UI对应的JS文件[8]。然后,利用CSS+Div进行页面布局,利用Easy 控件定义数据的输入和显示。最后,创建JS文件完成相应Easy UI控件的编程,并以Ajax方式发送请求到Spring MVC的Controller。图5展示了系统中科研秘书角色对科研项目进行审核的页面,其中科研项目信息放在Easy UI的Datagrid控件中展示,页面加载时调用JS文件中的相关函数,核心代码如下所示。
$(“#dp_tb”).datagrid({
remoteSort:false,
sortName:'isChecked,startDate',
sortOrder:'desc,desc',
frozenColumns:[[
{field:'id',title:'编号',checkbox:'true',sortable:'true',align:'center'},
{field:“departmentName”,title:“单位名称”,align:“center”},]],
columns:[[ {field:“title”,title:“项目名称”,align:“center”},
{field:“pnum”,title:“项目编号”,align:“center”},
{field:“userName”,title:“項目负责人”,align:“center”},
{field:“levleName”,title:“项目级别”,align:“center”},
{field:“score”,title:“项目积分”,align:“center”,sortable:“true”},
{field:“founds”,title:“项目经费”,align:“center”,sortable:“true”},
{field:“startDate”,title:“起始时间”,align:“center”},
{field:“endDate”,title:“结束时间”,align:“center”},
{field:“isChecked”,title:“审核状态”,align:“center”,sortable:“true”,
styler:function(value,row,index){
if(value == '已审核')
return 'color:green';
else
return 'color:red';
}},
{field:“isEnd”,title:“是否结题”,align:“center”,sortable:“true”,
styler:function(value,row,index){
if(value == '结题')
return 'color:green';
else
return 'color:red';
4 结 论
高校科研管理系统是科研工作的信息化基础设施和科研数据的存储中心,它能够为广大教职员工提供快捷方便的信息服务,为管理人员提供统一的操作平台,也是学院领导进行科研任务下达、分配的决策化辅助支持系统。以Easy UI、Spring MVC、Spring和Hibernate框架为基础,设计并实现了一个满足Java EE平台的高校科研管理系统,经过实践表明系统运行稳定、可靠,能够满足高校科研工作的基本需要。
参考文献
[1] 刘培华,董彩云,刘方爱.基于Struts 和AJAX 的项目报批系统的设计[J].济南大学学报:自然科学版,2012,26(1):11—14.
[2] 李秉键. 嘉应学院科研管理系统的设计与实现[D].重庆:重庆大学,2012.
[3] 刘琼.基于MVC架构的英语教学系统设计及应用[J].微型电脑应用,2018,34(11):107—109.
[4] 卢肖霞.SSH框架在Web项目开发中的设计与实现[J].计算机测量与控制,2018,26(10):122—127.
[5] 葛萌,黄素萍,欧阳宏基.基于Spring MVC框架的Java Web应用[J].计算机与现代化,2018,(8):97—101.
[6] 欧阳宏基,李红,宋笑雪.一种基于ES2SH 框架的Java EE 应用架构[J].实验室研究与探索,2018,37(10):151—156.
[7] 欧阳宏基,葛萌.基于S2SH框架的煤炭企业生产统计管理系统[J].计算技术与自动化,2015,34(3):118—122.
[8] 苗杰.基于Easy UI框架与Spring MVC框架的权限管理系统的设计与实现[J].电脑知识与技术,2015,11(15):53—55.