歐陽宏基 葛萌 王麗麗
摘? ?要:為了提高高等院校科研工作的效率,便于科研數(shù)據(jù)的統(tǒng)計(jì)與共享,提出了基于ESMSH框架的科研管理系統(tǒng)的實(shí)現(xiàn)方法。利用Easy UI構(gòu)建表示層,通過Spring MVC實(shí)現(xiàn)控制層,利用Spring整合Spring MVC和Hibernate,利用Hibernate實(shí)現(xiàn)數(shù)據(jù)持久層。分析了架構(gòu)的執(zhí)行流程,闡述了系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)。實(shí)踐表明,ESMSH框架通過清晰的分層結(jié)構(gòu)和松散的耦合,使系統(tǒng)具有較高的重用性和擴(kuò)展性。
關(guān)鍵詞:科研管理系統(tǒng);Easy UI;Spring MVC;Spring;Hibernate
中圖分類號:TP311? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識碼: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
高校的科研活動和科研能力是高校綜合實(shí)力的重要衡量指標(biāo),實(shí)現(xiàn)科研工作的信息化管理是高校數(shù)字化校園建設(shè)的重要內(nèi)容之一[1]。目前高校科研管理工作主要采取兩種方式[2]:一種是手工處理,通過Excel、word 等辦公軟件或者簡單的數(shù)據(jù)庫采集系統(tǒng)來處理數(shù)據(jù),此種方式對于學(xué)科門類多、科研項(xiàng)目與成果轉(zhuǎn)化數(shù)量多的高校而言,不僅給科研管理人員帶來繁重的工作量,并且造成科研管理人員和科研工作人員之間缺少必要和及時(shí)的溝通,導(dǎo)致信息在不同部門之間傳遞時(shí)失真且速度慢,最終難以反應(yīng)本??蒲泄ぷ髡鎸?shí)情況。另一種是采用IT手段進(jìn)行科研信息的管理,但是此種方式的科研項(xiàng)目管理系統(tǒng)多依賴固定的管理模式和各高校自己的業(yè)務(wù)管理方式,不具有靈活性、通用性和復(fù)用性。因此一套易于擴(kuò)展、復(fù)用和靈活的科研管理系統(tǒng)對于解決科研管理工作的難題、提高工作效率就顯得非常重要。
提出了一種基于B/S架構(gòu)的、符合Java EE規(guī)范的輕量級應(yīng)用開發(fā)方案來進(jìn)行科研管理系統(tǒng)的設(shè)計(jì)。該方案主要是利用目前業(yè)界流行的Spring MVC、Spring、Hibernate三大框架進(jìn)行架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)。相對于傳統(tǒng)的基于EJB的Java EE開發(fā)方案,本方案具有以下特點(diǎn):(1) 框架都是開源的,開發(fā)成本較低;(3)對應(yīng)用服務(wù)器的依賴程度低,面向POJO的實(shí)現(xiàn)方式,使測試變得容易;(3)每個框架都是Java EE分層模式中某個具體層面的最佳實(shí)踐,利用Spring作為“橋梁”能夠無縫集成Spring MVC和Hibernate。(4)具有良好的擴(kuò)展性、復(fù)用性和維護(hù)性。
1? ?系統(tǒng)總體設(shè)計(jì)
1.1? ?系統(tǒng)分析
通過對高等院校內(nèi)部科研工作詳細(xì)的需求分析,依據(jù)實(shí)際工作情況,對其業(yè)務(wù)進(jìn)行全方位的跟蹤分析,確定科研管理系統(tǒng)由:“項(xiàng)目管理”、“成果管理”、“人員管理”、“系統(tǒng)管理”、“信息公告”、“統(tǒng)計(jì)報(bào)表”等6大模塊。系統(tǒng)的角色包括:管理員、評審專家、校領(lǐng)導(dǎo)、二級學(xué)院領(lǐng)導(dǎo)、二級學(xué)院科研秘書、科研人員、項(xiàng)目組成員。通過系統(tǒng)能夠使項(xiàng)目申報(bào)、評審、立項(xiàng)、執(zhí)行過程跟蹤、科研數(shù)據(jù)統(tǒng)計(jì)分析等流程自動化,實(shí)現(xiàn)科研管理工作的公平、公正性。部分角色的用例如圖1所示。
圖1? ?科研管理中的核心角色與用例
1.2? ?系統(tǒng)功能及用例
項(xiàng)目管理模塊包括:項(xiàng)目的添加、修改、刪除、審核、進(jìn)度安排、結(jié)題等操作。科研成果管理包括論文、著作、獲獎、專利等管理。系統(tǒng)支持期刊庫的管理,教師錄入論文的期刊名稱時(shí)能自動匹配該期刊當(dāng)年的級別,方便對論文進(jìn)行積分統(tǒng)計(jì)。人員管理包括科研人員、評審專家、項(xiàng)目組成員的管理,權(quán)限、角色的分配。系統(tǒng)管理包括基礎(chǔ)數(shù)據(jù)的初始化、數(shù)據(jù)庫的備份和恢復(fù)、將當(dāng)前數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出為其他數(shù)據(jù)庫兼容的數(shù)據(jù)格式以及日志信息的管理。信息公告包括信息的發(fā)布、顯示、項(xiàng)目申報(bào)截止日期的設(shè)置等。統(tǒng)計(jì)報(bào)表包括對模塊按查詢數(shù)據(jù)的顯示與打印。
2? ?基于SMSH框架的系統(tǒng)架構(gòu)
2.1? ?架構(gòu)模型
以MVC模式[3]為基礎(chǔ),整合輕量級框架Spring MVC、Spring和Hibernate,將輸入、處理、輸出流程按照視圖、控制、模型的方式進(jìn)行分離,實(shí)現(xiàn)了表示層與控制層、業(yè)務(wù)邏輯接口與實(shí)現(xiàn)、DAO接口與實(shí)現(xiàn)、持久化對象與數(shù)據(jù)庫之間的解耦合,所形成的架構(gòu)如圖2所示。其中,視圖部分由JSP頁面和Easy UI框架構(gòu)成。Spring MVC充當(dāng)控制功能,通過URL的映射規(guī)則將模型與視圖關(guān)聯(lián)起來,共同完成用戶請求。模型包括業(yè)務(wù)邏輯和數(shù)據(jù)持久化兩部分,由Spring、Hibernate以及領(lǐng)域模型對象共同完成。領(lǐng)域模型對象負(fù)責(zé)業(yè)務(wù)流程、狀態(tài)的處理、業(yè)務(wù)
圖2? ?基于MVC和SMSH框架的系統(tǒng)架構(gòu)
規(guī)則的制定以及封裝不同層之間需要傳遞的數(shù)據(jù)等。Spring的IOC容器來管理領(lǐng)域模型對象及其之間的依賴關(guān)系[4],利用AOP方式將業(yè)務(wù)邏輯中的公共部分封裝成單獨(dú)的切面,用來實(shí)現(xiàn)權(quán)限驗(yàn)證、事務(wù)管理、日志記錄等操作,有效地降低了應(yīng)用組件之間的依賴性和應(yīng)用程序各層的耦合度。持久化業(yè)務(wù)由Hibernate和DAO模式完成,DAO接口定義持久化對象的數(shù)據(jù)庫操作,DAO實(shí)現(xiàn)類依賴Hibernate API和映射文件實(shí)現(xiàn)持久化對象與數(shù)據(jù)庫的交互。
2.2? ?架構(gòu)執(zhí)行流程
架構(gòu)的執(zhí)行流程如下:
(1)客戶端通過視圖頁面輸入數(shù)據(jù)并向Web服務(wù)器發(fā)送HTTP請求。
(2)請求經(jīng)過一系列的過濾器過濾后,由FilterDispatcher根據(jù)映射信息轉(zhuǎn)發(fā)到某個具體的Controller。
(3)Controller中的方法調(diào)用業(yè)務(wù)邏輯接口,業(yè)務(wù)邏輯接口的實(shí)現(xiàn)對象通過Spring IOC獲取。業(yè)務(wù)邏輯接口實(shí)現(xiàn)了控制層與業(yè)務(wù)邏輯層的解耦。
(4)業(yè)務(wù)邏輯接口的實(shí)現(xiàn)通過其依賴的BO對象完成具體的業(yè)務(wù)邏輯任務(wù)。業(yè)務(wù)邏輯接口的實(shí)現(xiàn)類和BO類需要通過Spring的配置文件或注解方式定義,將各自對象及其依賴關(guān)系 納入Spirng IOC管理。
(5)業(yè)務(wù)邏輯的實(shí)現(xiàn)類通過調(diào)用DAO接口將業(yè)務(wù)計(jì)算結(jié)果中需要保存到數(shù)據(jù)庫中的部分進(jìn)行持久化操作。DAO模式將業(yè)務(wù)邏輯中持久化部分與非持久化部分解耦,使得具體持久化方式不會影響業(yè)務(wù)邏輯層的執(zhí)行。DAO的實(shí)現(xiàn)類需要配納入Spring的IOC管理。
(6)DAO實(shí)現(xiàn)類封裝Hibernate的API來完成持久化對象與數(shù)據(jù)庫表的ORM映射。并利用Spring的AOP對事務(wù)進(jìn)行管理。
(7)DAO的執(zhí)行結(jié)果通過業(yè)務(wù)邏輯層返回給Controller,Controller根據(jù)結(jié)果來選擇某個視圖響應(yīng)請求,從而完成一個客戶端與服務(wù)器的交互過程。
3? ?系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)
3.1? ?SMSH 架構(gòu)的整合
SMSH架構(gòu)整合的思路是:以Spring為核心,向下整合Hibernate完成數(shù)據(jù)持久化操作;向上整合Spring MVC完成控制邏輯,分離數(shù)據(jù)顯示與業(yè)務(wù)處理。本文采用XML配置文件+注解的方式進(jìn)行框架整合和系統(tǒng)開發(fā),其中基礎(chǔ)配置部分采用XML文件,包括Spring MVC、Spring、Hibernate的核心配置文件以及持久化類的映射文件。開發(fā)部分中的依賴關(guān)系采用注解,依賴關(guān)系體現(xiàn)在業(yè)務(wù)邏輯層對持久層的依賴、控制層對業(yè)務(wù)邏輯層的依賴。
Spring與Hibernate整合的具體步驟是:首先,定義Hibernate配置文件-hibernate.config.xml,完成SessionFactory的配置。配置項(xiàng)主要包括數(shù)據(jù)庫方言、SQL語句顯示、數(shù)據(jù)庫表結(jié)構(gòu)生成策略、批量更新數(shù)目、批量獲取數(shù)目、查詢緩存、二級緩存和加載實(shí)體類映射文件等。然后,定義Spring配置文件applicationContext.xml,完成對Hibernate框架中SessionFactory對象的配置,具體包括加載hibernate.config.xml文件、創(chuàng)建C3P0數(shù)據(jù)庫連接池對象。
最后,在applicationContext.xml中創(chuàng)建聲明式事務(wù)管理器并注入所依賴的SessionFactory對象。
由于Spring MVC是Spring框架的一部分,所以Spring與Spring MVC整合只需定義spring-mvc.xml配置文件即可[5]。首先,定義自動掃描包,將注解定義的控制層組件納入IoC容器。然后,配置注解的處理器映射器和處理器適配器,配置內(nèi)部視圖解析器對模型視圖名稱添加前綴和后綴。最后,配置文件上傳解析器。
3.2? ?控制器的實(shí)現(xiàn)
控制器(Controller)接受DispatcherServlet分配的任務(wù),接收請求參數(shù)、調(diào)用Service組件執(zhí)行業(yè)務(wù)邏輯并返回邏輯視圖數(shù)據(jù)。本文將Controller當(dāng)作POJO對待,采用“非侵入+注解”的方式來實(shí)現(xiàn)[6]。在控制器類定義前添加@Controller,讓Spring把它當(dāng)作控制器,通過@Autowired標(biāo)識控制器所依賴的Service組件,在控制器的方法前添加@RequestMapping實(shí)現(xiàn)請求URL與控制器方法的映射;定義@RequestBody表示將請求的JSON格式數(shù)據(jù)轉(zhuǎn)換成控制器方法的形參數(shù)據(jù)類型;定義@ResponseBody表示將控制器方法返回值的數(shù)據(jù)轉(zhuǎn)換成JSON數(shù)據(jù)格式進(jìn)行響應(yīng)。
3.3? ?Service的實(shí)現(xiàn)
Service實(shí)現(xiàn)系統(tǒng)核心業(yè)務(wù)邏輯,包括Service接口和實(shí)現(xiàn)類兩部分。Service接口定義業(yè)務(wù)邏輯方法,向控制器提供調(diào)用接口;Service接口實(shí)現(xiàn)類依賴業(yè)務(wù)對象完成業(yè)務(wù)處理與數(shù)據(jù)計(jì)算,調(diào)用DAO組件完成持久化邏輯,如圖3所示[7]。
圖3? ?業(yè)務(wù)層類圖關(guān)系
以下項(xiàng)目管理模塊對應(yīng)的Service實(shí)現(xiàn)類的部分源碼,其中利用@Service標(biāo)識該類為Service組件,利用@Transactional表示該類相關(guān)方法使用事務(wù),通過@Resource定義所依賴的Service和DAO組件。其中主要的業(yè)務(wù)方法包括:按年份、院系計(jì)算項(xiàng)目得分、按項(xiàng)目級別查詢項(xiàng)目信息、按院系、年份查詢申報(bào)的項(xiàng)目以及結(jié)題的項(xiàng)目信息、按主持人查詢項(xiàng)目、按參與人查詢項(xiàng)目等。
@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的實(shí)現(xiàn)
DAO完成實(shí)體類與數(shù)據(jù)表之間的映射,每個實(shí)體類都有對應(yīng)的DAO接口和DAO實(shí)現(xiàn)類,DAO接口中封裝該實(shí)體類的持久化邏輯并作為業(yè)務(wù)邏輯層的訪問入口,DAO實(shí)現(xiàn)類封裝Hibernate API具體實(shí)現(xiàn)持久化邏輯。設(shè)計(jì)了如圖4所示的DAO類圖關(guān)系(以項(xiàng)目實(shí)體為例),其中BaseDao是用泛型技術(shù)所定義的實(shí)體類DAO的父接口,其中定義了每個實(shí)體類都具有的CRUD操作;BaseDaoImp是BaseDao的實(shí)現(xiàn)類,通過由Spring所注入的SessionFactory獲取Hibernate的Session對象完成對數(shù)據(jù)庫的操作;HQLQueryUtil類根據(jù)Where子句、From子句、OrderBy子句和查詢參數(shù)等生成HQL語句并封裝分頁查詢所對應(yīng)的實(shí)體對象集合;ProjectDao是項(xiàng)目實(shí)體類對應(yīng)的DAO接口,其中定義了項(xiàng)目實(shí)體所特有的持久化方法;ProjectDaoImp是項(xiàng)目實(shí)體的DAO實(shí)現(xiàn)類。
圖4? ?持久層邏輯結(jié)構(gòu)
3.5? ?領(lǐng)域模型的實(shí)現(xiàn)
領(lǐng)域模型根據(jù)實(shí)際業(yè)務(wù)需求由Java的各類業(yè)務(wù)對象組成,包括持久化對象(Persistence Object,PO)、業(yè)務(wù)對象(Business Object,BO)、值對象(Value Object,VO)、角色、權(quán)限、日志等。其中PO為持久層封裝被持久化的數(shù)據(jù),BO為業(yè)務(wù)領(lǐng)域相關(guān)對象之間提供面向?qū)ο蟮谋憩F(xiàn),VO封裝不同層之間需要傳遞的數(shù)據(jù)。角色對象將用戶對象和權(quán)限對象分離,便于為不同類型的用戶分配不同的權(quán)限。日志對象記錄用戶操作系統(tǒng)的痕跡。
3.6? ?表示層的實(shí)現(xiàn)
表示層主要負(fù)責(zé)前端頁面的展示、接收用戶的輸入數(shù)據(jù)、發(fā)送請求到控制器以及顯示請求的響應(yīng)結(jié)果。首先,創(chuàng)建JSP頁面通過Script標(biāo)簽引入Easy UI對應(yīng)的JS文件[8]。然后,利用CSS+Div進(jìn)行頁面布局,利用Easy 控件定義數(shù)據(jù)的輸入和顯示。最后,創(chuàng)建JS文件完成相應(yīng)Easy UI控件的編程,并以Ajax方式發(fā)送請求到Spring MVC的Controller。圖5展示了系統(tǒng)中科研秘書角色對科研項(xiàng)目進(jìn)行審核的頁面,其中科研項(xiàng)目信息放在Easy UI的Datagrid控件中展示,頁面加載時(shí)調(diào)用JS文件中的相關(guān)函數(shù),核心代碼如下所示。
$(“#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:“項(xiàng)目名稱”,align:“center”},
{field:“pnum”,title:“項(xiàng)目編號”,align:“center”},
{field:“userName”,title:“項(xiàng)目負(fù)責(zé)人”,align:“center”},
{field:“l(fā)evleName”,title:“項(xiàng)目級別”,align:“center”},
{field:“score”,title:“項(xiàng)目積分”,align:“center”,sortable:“true”},
{field:“founds”,title:“項(xiàng)目經(jīng)費(fèi)”,align:“center”,sortable:“true”},
{field:“startDate”,title:“起始時(shí)間”,align:“center”},
{field:“endDate”,title:“結(jié)束時(shí)間”,align:“center”},
{field:“isChecked”,title:“審核狀態(tài)”,align:“center”,sortable:“true”,
styler:function(value,row,index){
if(value == '已審核')
return 'color:green';
else
return 'color:red';
}},
{field:“isEnd”,title:“是否結(jié)題”,align:“center”,sortable:“true”,
styler:function(value,row,index){
if(value == '結(jié)題')
return 'color:green';
else
return 'color:red';
4? ?結(jié)? 論
高??蒲泄芾硐到y(tǒng)是科研工作的信息化基礎(chǔ)設(shè)施和科研數(shù)據(jù)的存儲中心,它能夠?yàn)閺V大教職員工提供快捷方便的信息服務(wù),為管理人員提供統(tǒng)一的操作平臺,也是學(xué)院領(lǐng)導(dǎo)進(jìn)行科研任務(wù)下達(dá)、分配的決策化輔助支持系統(tǒng)。以Easy UI、Spring MVC、Spring和Hibernate框架為基礎(chǔ),設(shè)計(jì)并實(shí)現(xiàn)了一個滿足Java EE平臺的高??蒲泄芾硐到y(tǒng),經(jīng)過實(shí)踐表明系統(tǒng)運(yùn)行穩(wěn)定、可靠,能夠滿足高??蒲泄ぷ鞯幕拘枰?/p>
參考文獻(xiàn)
[1]? ? 劉培華,董彩云,劉方愛.基于Struts 和AJAX 的項(xiàng)目報(bào)批系統(tǒng)的設(shè)計(jì)[J].濟(jì)南大學(xué)學(xué)報(bào):自然科學(xué)版,2012,26(1):11—14.
[2]? ? 李秉鍵. 嘉應(yīng)學(xué)院科研管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].重慶:重慶大學(xué),2012.
[3]? ? 劉瓊.基于MVC架構(gòu)的英語教學(xué)系統(tǒng)設(shè)計(jì)及應(yīng)用[J].微型電腦應(yīng)用,2018,34(11):107—109.
[4]? ? 盧肖霞.SSH框架在Web項(xiàng)目開發(fā)中的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2018,26(10):122—127.
[5]? ? 葛萌,黃素萍,歐陽宏基.基于Spring MVC框架的Java Web應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2018,(8):97—101.
[6]? ? 歐陽宏基,李紅,宋笑雪.一種基于ES2SH 框架的Java EE 應(yīng)用架構(gòu)[J].實(shí)驗(yàn)室研究與探索,2018,37(10):151—156.
[7]? ? 歐陽宏基,葛萌.基于S2SH框架的煤炭企業(yè)生產(chǎn)統(tǒng)計(jì)管理系統(tǒng)[J].計(jì)算技術(shù)與自動化,2015,34(3):118—122.
[8]? ? 苗杰.基于Easy UI框架與Spring MVC框架的權(quán)限管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識與技術(shù),2015,11(15):53—55.