基于ASSH框架的运动会信息管理系统设计
2011-03-14王爽
王爽
(西安体育学院网络管理中心,陕西西安710068)
大型运动会在全国乃至全世界都有着重要的影响,但是对于运动会的管理工作却是一件比较复杂的事情。如果采用人工处理的方法进行运动会数据输入、处理和发布,不仅速度慢、效率低、容易出错,而且也不便于与当前运动会的外围显示系统和综合信息发布系统进行数据共享和信息发布,迫切需要开发一种在网络环境下运行的,符合实际需要的运动会信息管理系统[1]。因此,利用计算机技术、网络通信技术、数据库技术等实现运动会信息的管理,对于减轻繁重的手工劳动,提高工作效率和管理水平,实现运动会管理的信息化和现代化具有重要的现实意义。传统的开发方法难以快速开发出功能强大、系统可扩展性强的基于Web的应用系统。而一个优秀成熟的框架既可以提高开发效率,又可以保障系统质量。本文将ASSH(AJAX+Struts+Spring+Hibernate)框架引入了运动会信息管理系统应用的开发中,对整合的架构应用进行具体的研究。
1 系统设计及相关技术介绍
系统在物理上由3部分组成,第1部分:前端具有WLAN功能的手持PDA或计算机,以便通过无线网络与数据处理计算机进行通信,第2部分:数据处理计算机,整个系统的核心部件,包括了所有基础信息处理的功能。第3部分:数据库服务器,用于存储各种基础信息[2]。
本系统选用J2EE平台。J2EE的跨平台操作性很强,可搭建具有可伸缩性、灵活性、易维护性的系统。系统开发基于B/S的三层体系结构,分别是:表示层,位于最上层,离用户最近,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。业务逻辑层:负责处理用户输入的信息,或者是将这些信息发送给数据访问层进行保存,或者是调用数据访问层中的函数再次读出这些数据,业务逻辑层也可以包括一些“业务逻辑”描述代码。持久层:实现对数据的保存和读取操作。由于采用了三层架构,使得数据的存储在后台数据库服务器上完成,业务功能由成绩处理计算机即应用程序服务器完成。采用该模式,客户端不直接与数据库服务器相连接,提高了数据库的安全性。更重要的是,对体育比赛而言,当竞赛项目的业务逻辑发生微调时,只需修改成绩处理计算机上的程序即可,而不需要对客户端进行任何改动。
1.1 系统功能
运动会信息管理系统涵盖以下子系统:
1)系统维护子系统是公用子系统,负责为其它子系统提供公共信息,管理用户、设置用户权限和维护系统日志。
2)赛事管理子系统是基本子系统,负责为其它子系统提供运动会信息和比赛项目信息。其中包括注册系子统,赛制设置子系统,场馆管理子系统,比赛主计划子系统,赛程编排子系统[3]。
3)运动会成绩系统运动会成绩系统是运动会的核心系统,包括:中心成绩系统、场馆成绩系统、现场计时记分系统。
4)运动会信息发布子系统运动会信息发布系统是运动会对外发布的窗口将涵盖:
①信息网站;②电视转播字幕系统;③打印分发系统;④现场LED显示屏系统。
1.2 ASSH框架介绍
AJAX指异步JavaScript及XML,借助于AJAX,可以在用户单击按钮或链接时,利用JavaScript和DHTML立即更新用户界面,并向服务器发出异步请求,以执行更新或查询。当请求返回时,就可以使用JavaScript和CSS相应地更新用户界面,而不是刷新整个页面,这种特性决定了它适用于需要与服务端频繁交互,操作即时响应要求高的环境。采用AJAX技术可以减少数据传输量以及加快响应速度[4]。
Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,用Action类负责页面跳转和后台逻辑运算,Jsp页面负责数据的输入和输出显示,Form类负责传递Action和Jsp中间的数据。Jsp中可以使用Struts框架提供的一组标签,就像使用html标签一样简单,但是可以完成非常复杂的逻辑。但如果把运算逻辑都放在Struts的Action类里将使得Action类复用度低和逻辑混乱,所以通常会把整个Web应用程序分为3层,Struts负责表示层,它调用业务逻辑层完成运算逻辑,业务逻辑层再调用持久层完成数据库的读写。
Struts调用业务类时,需要新建一个业务类出来,然后使用,业务逻辑层需要调用持久层的类,也需要新建一个持久层类出来用。简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,如果想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。
Spring框架,它的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。只要有一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是依赖注射和控制反转。
Hibernate框架,可以创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,也可以实现关系数据库的各种表间关联的对应。当需要相关操作时,不用再关注数据库表,不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使软件开发真正面向对象,而不是面向混乱的代码,使用Hibernate可以比JDBC方式减少很多的编程量[5]。
另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,同时为了很好的处理事物,Spring集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便。
现在的架构是,Struts负责表示层,AJAX则作为Struts在表示层上的补充,Spring负责中间的业务层,Hibernate负责持久层,形成了ASSH框架,其架构如图1所示。采用上述架构,不仅实现了视图、控制器与模型的彻底分离,而且还实现了表示层、业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响。系统采用此架构开发,无论在整体架构还是在局部的复杂业务模型中都有了更低的耦合性,而且提高了灵活性与可维护性、可扩展性及可重用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。在性能速度、交互性和体验上也有很大的改善,这样便消除了单独使用这些框架开发系统的不足[6]。
图1 ASSH框架架构图Fig.1Frame structure of ASSH
2 系统实现
Struts、Spring、Hibernate的优势分别在于J2EE的表示层,业务逻辑层,持久层。本系统中集成框架的具体做法是用面向对象的分析方法根据需求来提出一个模型,将这些模型采用Java语言来实现出基本的Java对象,然后写出基本的DAO(数据访问对象)接口,并给出Hibernate的DAO实现,这样就可以通过Hibernate框架实现的DAO类来实现Java类与数据库之间的转换和访问,然后由Spring来完成业务逻辑处理。在此架构中,由Struts负责降低系统总架构的耦合性,由Spring负责复杂的业务逻辑处理,由Hibernate负责降低模型部分的开发难度,由AJAX负责在页面进行监听和异步处理。
系统的基本业务流程是:在表示层中,首先通过AJAX和JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(Struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。在业务逻辑层中,管理服务组件的Spring IOC容器负责向Action提供业务模型组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
2.1 持久层的实现
本系统使用Hibernate框架实现应用的持久层,封装访问数据库的实现细节,并向上层提供面向对象的数据访问API。创建Hibernate框架为应用服务,分为如下3个步骤:1)创建O/R Mapping(对象关系映射)文件;2)创建Hibernate配置文件;3)通过Hibernate API实现具体的DAO数据访问。
Hibernate通过O/R映射文件将对象与关系型数据相关联,因此需要编写和数据库表相对应的Java持久化类以及对应的映射文件[7]。有了Java持久化类后就可以在此基础上实现数据访问类。在Spring框架中,数据访问类可以从辅助类HibernateDaoSupport继承,这极大地方便了Hibernate框架在Spring中的使用。以下是用户管理模块中,Hibernate映射文件User.hbm.xml的部分代码。
<class
name=“com.sun.Hibernate.system.User”
table=“SYSTEM_USER”>
<id name=“id”type=“long”column=“ID”>
<generator class=“sequence”>
<param name=“sequence”>seq_user</param>
</generator>
</id>
<property name=“name”type=“java.lang.String”column=“NAME”length=“10”/>
<propertyname=“password”type=“java.lang.String”column=“PASSWORD”length=“10”/>
……
<many-to-one name=“role”
class=“com.sun.Hibernate.system.Role”insert=“false”
update=“false”>
<column name=“ROLEID”/>
</many-to-one>
具体的Hibernate数据源、Session工厂、事务管理、缓冲连接池等功能都由业务逻辑层的Spring容器提供。
2.2 业务逻辑层实现
业务逻辑层由Spring框架支持,提供了处理业务逻辑的服务组件。开发者需要对业务对象建模,抽象出业务模型并封装在模型组件中。由于数据持久层实现了Java持久化类并且封装了DAO,因此可以在模型组件中方便地调用DAO组件来存取数据[8]。Spring的IoC容器负责统一管理模型组件和DAO组件以及Spring所提供的事务处理、缓冲连接池等服务组件。
例如:在用户管理模块中,通过业务建模创建了用户模型UserService类,封装了对用户的权限管理等功能。UserService类通过调用数据访问类UserDao实现对用户数据的操作。这些组件的关系将通过配置Spring框架的applicationContext.xml联系起来,配置文件的部分代码如下:
<beanid=“userDAO”class=“com.sun.Spring.system.UserDAOImpl”>
<property name=“sessionFactory”><ref local=“sessionFactory”/></property>
</bean>
<bean id="userDAOProxy"
class=“org.Springframework.transaction.interceptor.
TransactionProxyFactoryBean”>
<property name=“transactionManager”><ref bean=“transactionManager”/></property>
<property name=“target”><ref local=“userDAO”/></property>
……
</bean>
<bean name=“/user”class=“com.sun.Struts.actions.system.UserAction”singleton=“false”>
<propertyname=“userDAO”><refbean=“userDAOProxy”/></property>
……
</bean>
2 .3表示层实现
本系统中表示层主要由Struts框架,AJAX技术实现,设计严格依照MVC模式,其中V(视图层)通过Jsp页面实现,C(控制层)由Servlet实现,M(模型层)则由Action及AJAX后台程序实现,下面举系统中的一个例子来说明Struts和AJAX在表示层的应用。在管理人员添加页面中,当用户在Jsp页面中填写完人员姓名、密码等信息后,JavaScript中相应的XMLHttpRequest回调函数将异步派发XMLHttpRequest请求,后台将根据提供的姓名、密码从数据库相应表中得到该人员个人基本信息。随后服务器响应会传到浏览器,在解析请求参数后,Servlet执行必需的应用逻辑,将响应信息封装到XML中,并将它写回HttpServletResponse。客户端注册在XMLHttpRequest上的回调函数现在会被回调,用以处理由服务器返回的数据,并通过更新用户界面来响应服务器传输过来的数据[9]。信息完成后提交时,所有需要保存的数据通过表单提交给相应的Servlet。由其根据配置文件调用相应Action进行后续处理。这样做的好处是使视图层、控制层、模型层完全分离,同时加入了AJAX的异步处理功能,使系统无论是在安全性、可扩展性还是交互性上较之普通设计都有明显提高。
控制器是按Struts-config.xml文件中的配置来决定业务流的转向,开发人员在业务流控制方面的主要工作是对Strutsconfig.xml进行配置[10],Struts-config.xml部分代码如下:
<form-bean name=“userForm”
type=“com.sun.Struts.forms.system.UserForm”/>
</form-beans>
<global-forwards>
<forward name=“index”path=“/index.Jsp”/>
<forward name=“login”path=“/login.Jsp”/>
……
</global-forwards>
<action-mappings>
……
<action path=“/user”name=“userForm”validate=“false”parameter=“method”
type=“org.Springframework.Web.Struts.DelegatingActionProxy”>
……
<forward name=“password”path=“/pages/system/user/password.Jsp”/>
</action>
在Struts-config.xml文件中定义保存HTTP表单对应的Form和对应的Action类。Form Bean必须在Struts-config.xml进行正确配置后,才能被程序引用。
3 总结
系统采用AJAX+Struts+Spring+Hibernate开源框架技术。在此架构中,表示层采用Struts,业务逻辑层采用Spring,数据持久层选择Hibernate。整个架构能够很好地实现控制流、业务调用、表示这3者的分离,集成后的框架具备了3种框架的技术优势,将Struts的MVC机制,Spring的反转控制机制以及Hibernate的O/R Mapping映射机制融合在一起,此架构在系统开发简洁性、开发效率、开发成本以及维护费用等方面有着很大的优势,同时,采用了当下十分流行的AJAX技术,这使系统具有更加完美的用户体验。
[1]刘槐德.高校运动会综合信息管理系统的设计与实现[D].重庆:重庆大学,2009:9-10.
[2]宋依青,李书旗,王海滨.基于WLAN的分布式竞赛打分系统的设计与实现[J].微电子学与计算机,2009,26(11):165-168.SONGYi-qing,LIShu-qi,WANGHai-bin.Designand realization of distributional competition grading system based on the WLAN[J].Microelectronics&Computer,2006,26(11):165-168.
[3]蒲川江.奥运比赛管理系统分析与设计及关键技术研究[D].北京:清华大学,2005:14-16.
[4]Woolston D.Pro Ajax and the NET 2.0 platform[M].LosAngeles,California,USA:Wager T Press,2006.
[5]李刚.轻量级企业应用实战—Struts+Spring+Hibernate整合开发[M].北京:电子工业出版社,2007.
[6]傅鹂,殷旻昊.基于Struts+Spring+Hibernate+Ajax技术的科研管理系统设计[J].软件导刊,2009,8(1):134-136.FU Li,YIN Min-hao.Design of research management system based on Struts+Spring+Hibernate+Ajax technology[J].Software Guide,2009,8(1):134-136.
[7]谌湘倩,狄文辉,孙冬.基于SSH框架与AJAX技术的Java Web应用开发[J].计算机工程与设计,2009,30(10):2590-2592.CHEN Xiang-qian,DI Wen-hui,SUN Dong.Application of Java Web Based on SSH and AJAX[J].Computer Engineering and Design,2009,30(10):2590-2592.
[8]杨波,刘渊,冷文浩.基于Struts+Hibernate+Spring架构的船舶数字化平台的设计与实现[J].计算机应用与软件,2008,25(2):1409-1412.YANG Bo,LIU Yuan,LENG Wen-hao.Ship digitized platform based on architecture of Struts&Hibernate&Spring[J].Computer Applications and Software 2008,25(2):1409-1412.
[9]肖杰,陈翔,何海江,等.基于AJAX和Struts的Web应用的设计与实现[J].计算机工程与设计,2009,30(8):1934-1938.XIAO Jie,CHEN Xiang,HE Hai-jiang,et al.Design and implementation of Web application based on AJAX and Struts[J].Computer Engineering and Design,2009,30(8):1934-1938.
[10]王军豪,彭岩.Hibernate+Struts+Spring整合技术在电子政务中的应用[J].计算机工程与设计,2008,29(6):1409-1412.WANG Jun-hao,PENG Yan.Application of Hibernate+Struts+SpringintegratetechnologyinE-government[J].Computer Engineering and Design,2008,29(6):1409-1412.