张建军,刘虎,倪芳英,吉勇祥
(湖南师范大学工学院,中国 长沙 410081)
随着互联网与Web应用编程技术的快速发展,Web应用平台不仅要具有以前简单的信息发布功能,而且更要具备动态、实时处理大量交互信息的功能,且这种处理大量交互信息的功能还在网络技术的不断发展与普及的过程中,不断变化、扩展与提高.那么,如何能高效、方便开发出应用灵活、功能强大、开发过程简单快捷的Web应用平台也就成了大家关注的课题[1].
当前流行的Struts+Spring+Hibernate(下面简称SSH)架构,为高效、方便开发出应用灵活、功能强大的Web应用平台提供了完整的、轻量级J2EE软件开发模型,经常用于构建高质量的Web应用.但是,开发Web应用平台除了要考虑应用平台的功能强大、系统的健壮和稳定等这些性能指标外,还要把服务器与用户之间的快速交互作为衡量Web应用平台动态、实时处理交互信息的重要指标来考虑.AJax就是为了解决“与用户快速交互”这一问题提出的方法与思路,而ExtJS正是实现AJax的一种技术,它主要用于构建前端用户界面,从而实现与后台技术无关的前端AJax技术框架,能够实现系统与用户的快速交互[2-5].本文以开发“基于条形码的设备管理系统”为背景,通过研究应用SSH与ExtJS的整合架构开发Web应用平台的实现方法,构建了一个灵活、易于扩展、易于维护的多层Web应用平台.同时,这种基于SSH与ExtJS 整合架构将显示、业务运算、数据库等功能完全分离,从而实现了系统的低耦合性和良好的可维护性.
目前,JAVA中MVC的常用开发方式主要有以下几种:Jsp+Servlet+JavaBean(EJB), Jsp+JavaBean(Controller)+ JavaBean(EJB)(Model), Jsp+ Struts+ JavaBean(EJB), SSH (Struts + Spring + Hibernate)[6-9].SSH架构整合Spring、Struts和Hibernate这三项当前流行的Java Web开源框架技术,利用它可以构建出灵活、易于扩展、易于维护的多层Web应用程序. SSH架构在结构上采用分层原理,从整体上可以分为4层如图1所示.
图1 SSH架构示意图 图2 ExtJS+Spring+Hibernate架构示意图
Spring是为解决企业应用开发复杂性而由Rod Hohnson创建的、支持Inversion of Control(IOC控制反转)和Aspect Oriented Programming(AOP面向切面编程)、轻量级的、开源的容器框架.通过利用IOC技术,可以方便地解除程序间的过度耦合、简化开发;通过利用对AOP编程技术的丰富支持,分离应用业务逻辑与系统服务,提高系统内聚性;同时通过提供对Struts、Hibenate等框架的支持,方便集成其他优秀框架[10].
Struts由the Apache Software Foundation(Apache软件基金会)提供的、免费开源的、可创建Java Web应用解决方案的Web层应用框架,用来帮助开发者高效创建基于MVC模式的J2EE Web应用.它提供3个主要部件:用于映射URL的请求句柄、传递控制的响应句柄及用于交互的标签库.Struts框架也能够与SOAP与AJax等技术进行良好兼容[11].
Hibernate是基于Java语言下对象关系映射的、工作在持久层的、解决方案与开源框架.其设计宗旨是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来.它支持封装、多态等面向对象编程特性,并不需要为持久类提供基类或接口从而实现“透明”持久,同时支持Hibernate Query Language (HQL)、Java Persistence Query Language (JPAQL)、SQL等查询语言,提供高效查询支持[12-13].
ExtJS是由Scencha公司提供的、可在任一浏览器上构建丰富应用的Java脚本框架.它为用户利用MVC模式创建Web应用提供了很好的数据包支持,提供诸如:图表、网格、树、菜单等大量的、流行的UI插件(即使用户需要的插件不在核心插件库中,也可以在Scencha提供的网络社区资源中找到)及定期维护的、丰富的学习资源(如API使用文档等),以满足不同阶层用户的应用需求.ExtJS提供的图表几乎支持任何Java脚本与框架,并可在流行操作系统上的任一款浏览器上进行完美显示.ExtJS的最新版本为4.0,在原有基础上新增了350多个API及50多个新类,并在提供的SDK工具包中提供了代码优化功能,以帮助开发者优化Java脚本实现对浏览器的更好支持[14].
ExtJS+SSH新架构保留了Spring+Hibemate的组合,从表示层、控制层和业务逻辑层入手,使用ExtJS实现Struts框架中的页面表示,架构整合的基本原理如图2所示.
基于条形码的设备管理Web平台是利用ExtJS+SSH整合架构来实现的管理信息平台.该系统包括:系统管理、客户管理、设备管理、销售管理、统计管理、公司文档及备份管理等功能模块.系统登陆后的界面如图3所示.
图3 设备管理Web平台登陆界面
考虑到传统JSP编程在数据提交时可能会携带有表单,表单中的Action属性会暴露自己服务器的请求方式和参数,外部用户可以模拟服务器请求而获得内部信息或内部操作权限.为此,我们采用了ExtJS框架技术.所有页面由JS完成和自己所编写的JS过滤器相结合,在过滤器中对用户进行验证,若是系统用户才能加载JS脚本,否则将会调转至登录页面;因此外部用户无法窃取本系统的JS代码,这样做提高了页面信息的保密性.页面采用的JS引入方式如〈script type=“text/javascript” src=“〈%=basePath %〉 js/user.js? uid={user.emplNo}”〉 uid为携带的用户ID.JS.使用ExtJS框架技术的页面代码如清单1所示.
Hibernate的配置包括两个方面:一方面是ORM的配置,一方面是hiberante.cfg.xm的配置.ORM(Object References Mapping)对象关系映射,由于hibernate 操作的是对象而不是数据库中的记录与字段,所以必须要配置一个对象与数据库表的一一对应关系.这样做了以后,开发者只需要了解对象与对象之间的关系,无需了解数据库里是什么表,什么字段.而且这样做隔离了开发代码与数据库的耦合,提高了开发平台的移植性.配置代码如清单2所示.
事务在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务应该具有4个属性:原子性、一致性、隔离性、持续性[15].所以我们在执行一组复杂的数据库操作时应该给其配置事务,这样可以保证数据的完整性、也避免了多线程同时操作数据库而带来的读赃数据问题,并且也简化了这样的企业级别分布式应用的构造.为spring事务的配置如清单3所示.
本文通过研究基于MVC模式的三层结构体系,以流行的Web开发技术—SSH构架为基础,利用ExtJS框架技术,提出了基于ExtJS框架与SSH的整合构架,并以此为基础设计、实现了基于条形码的设备管理Web平台.系统由于采用了SSH开源型框架,从而降低了系统开发成本、提高代码的利用率和系统的扩展性;并通过采用ExtJS框架技术,提高了与用户的交互速度,加强了系统的安全性.
参考文献:
[1] 李成严,冯慧灵.基于开源技术的Web应用架构研究[J].计算机技术与发展, 2009,19(8):27-30.
[2] 袁华强,王亚强,朱 君.利用J2EE轻量级框架构建Web应用研究[J].计算机工程与设计, 2007,28(1):22-25.
[3] 王宝龙,李子扬,李晓辉.基于SSH框架的DWR技术的减灾卫星运行管理[J].计算机工程与设计, 2010,31(23):5096-5099.
[4] DWR-easy ajax for java [EB/OL]. http://directwebremoting.org/dwr/index.html, 2012-09-10.
[5] AJAX. A new approach to Web applications[EB/OL]. http://www.adaptivepath.com/ideas/, 2012-09-08.
[6] 蔡俊亚.一种基于服务构件模型的自适应方法[J].湖南师范大学自然科学学报, 2011,34(1):47-51.
[7] 翁兴旺,宋燕辉.WCDMA网络工程中的容量提升策略[J].湖南师范大学自然科学学报, 2010,33(2):13-17.
[8] HE L J, YI L, LIU L C. Loosely coupled and reu-sable MVC model web paging design[J].Comput Eng Appl, 2007,43(15):95-97.
[9] JOHN RITTINGHOUSE, JAMES RANSOME. Cloud computing:implementation,management, and security[M]. USA, Florida: CRC Press, 2009.
[10] Sprinng[EB/OL]. http://wenku.baidu.com/view/84fee207eff9aef8941e06cf.html, 2012-09-20.
[11] Apache Struts.http://struts.apache.org/index.html, 2012-10-16.
[12] Why Hibernate. http://www.hibernate.org/about/why-hibernate, 2012-10-12.
[13] 张鹏伟,陈景霞,张文平,等.基于ExtJS和SSH的Web应用架构的研究与实现[J].陕西科技大学学报, 2010,28(6):111-115.
[14] Sencha.ExtJS overview[EB/OL].http://www.sencha.com/products/extjs/, 2012-10-16.
[15] Crazycat.Ibatis Transaction[EB/OL]. http://www.iteye.com/wiki/blog/550491, 2012-03-03.