基于Grails的Web应用框架研究简论
2015-10-21梁小玲
梁小玲
[摘要]当今时代,web应用日益广泛,且开发技术不断发展, web开发中使用最多的框架大多数都是基于J2EE平台。但J2EE应用框架随着用户需求的多样化、逐渐膨胀的XML配置管理文件以及不断加入的各种组件,这种框架体系变得越来越臃肿,其开发和运行速度很难满足开发者的需求。Grails框架正是为了解决上述问题,为了极大地满足程序员开发和运行速度上的需求而提出的解决方案。
[关键词]Web Grails 开发框架
自互联网出现以来,对Web应用技术的探讨与争论就从来没有停止过。在多年的发展后,Web应用也迎来了一次深度的革新。J2EE所具有的开放性、跨平台性使得它在Web应用开发平台中的地位如日中天,各种各样的开发框架在该平台上层出不穷。Grails框架自身包含了构建web应用的所有组件,可以独立地、高效地开发应用程序,使得开发过程简单而快捷,极大地迎合了开发者的需求。相比较J2EE应用框架,该框架在开发效率和web应用部署方面体现了强大的优势。
传统Web应用框架概述
Web应用框架,Web application framework,用来支持动态网站、网络应用程序及网络服务的开发。这种框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。可以说,一个框架是一个可复用的設计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。
框架的最大好处就是重用。面向对象系统获得的最大的复用方式就是框架,一个大的应用系统往往可能由多层互相协作的框架组成。
目前Web应用系统开发框架有很多种,新的开发框架也不断出现,例如最常被提及的也是最著名的MVC开源框架之一的Struts,轻量级框架WebWork,另外Spring,cocoon等。这些开发框架的性能各有特点,它们的问世在很大程度上加快了Web开发框架发展的速度,也多个方面为Web应用提供多种服务。
传统Web应用框架的缺点
对于Java Web开发人员来说,一直期望着能出现一个无须太多配置的Web应用框架,能够帮助我们直接来完成业务逻辑处理,而不需要了解堆积如山的配置选项,虽然上述现有框架(如Struts、Spring、JSF等),越来越多地采用代码生成方式来开发Web应用程序,可惜这些代码生成工具只能用来生成相关的环境配置信息或只能用于应用程序的初期开发阶段。
而如今Web开发框架层出不穷,每个新的框架的出现都会在原有经典框架的基础上有所改进、有所创新,本文将要讲述的Groovy on Grails应用框架也是如此。
Grails Web应用框架概述
在Web应用日益普遍和复杂的今天,使用Web应用框架、选择一种好的Web应用框架进行系统开发,对于提高系统的开发效率,增强系统的正确性、健壮性都起到了极其重要的作用。目前人们提出了各种Web应用系统开发框架,但这些框架一般只封装了较为底层的技术细节,软件复用的粒度较小。我们提出了一种新型的Groovy on Grails的Web应用开发框架。本框架较好地实现了对表现层、业务逻辑层和数据层的分离和封装,并方便地提供对事务处理、身份认证、权限控制等关键服务的支持。我们将本框架应用于“湖北高级人民法院信访案件管理系统”项目的实际开发之中,实践表明,本框架能够较好地支持大型的Web应用系统,大大提高软件开发效率。
用Groovy语言编写的Grails框架以其开发快捷、简单易用的特点极大地简化了开发过程,降低了开发成本,同时较好地兼顾开发和运行效率,近年来逐渐成为Web应用开发者关注的焦点。
Grails是一个较新的Web应用开发框架,它是用Groovy语言编写的全栈型(full--stack)、开源的Web框架。Grails的目标就是超越其它语言在Web领域的独占,为此Grails把目标集中在以下三个方面:
①与Java平台紧密集成;
②提供简单的接口,同时保持调用底层Java框架的灵活性及其特性;
③改进Java平台已有的缺点。
Groovy成为Java平台上的通用语言这一目标,与Grails成为通用Web框架的目标不谋而合。他们都希望尽可能使用Java,开发人员不需要重新学习就可以过渡到动态语言的开发中。Grails通过定义简单的接口来提供上述框架的功能,但仍然可以分别独立使用各框架。图2.1表明Grails和这些框架以及企业级Java之间的关系。Groovy虽然可以在Grails之外与Sp订ng、Hibernate等的API协作,但Grails仍然控制着企业级Java和Groovy高级特性之间的联合,以便能为构建Web应用提供一个简单的环境。
Grails优越性体现
(1)DRY(Dont RepeatYourself,不要重复自己),约定优于配置(Convention over Configuration)
DRY和约定优先于配置的思想,是由Rails兴起并迅速被广泛接收和欣赏的Web框架新思路。Grails作为J2EE世界的Rails,把这些最前沿的设计理念带入已显得陈旧的J2EE社区,拥有鲜明突出的特点,以及由此带来的优秀的开发效率。
DRY的思想是避免重复的信息。Grails中的DRY主要体现在URL映射定义上(URLMappings.groovy)。在URLMappings.groovy中定义了应用的各个URL以后,通过使用Grails预定义的动态Con仃oller方法和GSP标签,开发者就不必再把程序URL硬编码在各处。比如使用GSP标签
在约定优于配置方面,Grails和Rails非常相似。所谓约定优于配置,就是按照框架约定的方式来组织资源,就可以免去任何额外的配置。比如Grails的自定义标签,存放在应用目录下的grails-app/taglib路径下,并以XXXTagLib.groovy的方式命名,就能无需任何配置就可以在GSP里使用这些标签库了。另外还有Service类,Job类,包括整个Grails应用的目录结构。
(2)JVM
通过运行在JVM之上,Grails拥有一个经过多年开发,已经非常成熟,业界标准级别的运行环境。JVM的稳定性和最新版本的性能都已经相当成熟。相比最直接的比较对象Rails,Grails在运行环境性能上的优势是比较明显的。另外,已有的Java可重用组件基本都可以直接使用于Grails,无疑也是Grails的一个明显优势。
(3)Groovy语言
Grails和Groovy语言的关系是密不可分的。对于Groovy来说,Grails是其最大的杀手级应用。而对Grails来说,Groovy是其能够实现灵活多变的快速开发,区别于其他运行于JVM之上的Web框架的核心技术。
Groovy的动态特性是其最大亮点,在这方面几乎不输于Ruby等其他热门的动态语言。meta-programming,closure等等热门的动态语言特性在Groovy中都有很好的实现。而且Groovy程序能够编译为JVM字节码的.class文件,直接运行在JVM上,Groovy程序的性能能够得到一定的帮助。Groovy能够和Java混合编写,混合编译,使得Java程序员能不用浪费自己在Java语言上的大量投入,更轻松快捷地进入Groovy的世界。使用Groovy编程,相比使用Java来说快速轻松得多,对为数众多的Java程序员颇有吸引力。
(4)插件系统
Grails的插件系统也是其亮点之一。首先,和Rails,Django等Web框架类似,基于微内核的思想,插件(可重用模块)是框架的一等公民。Grails除了核心模块以外的功能几乎都是通过插件方式实现的。实际上,一个Grails插件和一個Grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个FooPlugin.groovy文件,提供插件的一些描述信息。
Grails插件基本可以做任何事情,Grails社区已经提供了各式各样的插件,发布在Grails官方插件源上。查看现有的官方插件,可以执行下面的命令。
(5)GSP和标签库
Grails前端开发使用的是GSP(Grails Server Pages),开发者可以使用Grails特定的模板语法编写GSP动态页面,并且可以直接使用Groovy脚本或是各种预定义和自定义标签库(taglib)。这么看起来和JSP区别不大,而实际上,Grails带给开发者的是远比名字上的区别大得多的开发效率上的进步。
首先,虽然不是推荐的做法,但是直接在GSP中使用Groovy脚本的话就直接利用了Groovy快速开发的优势。
另外,J2EE开发者对于JSP标签库的易用性大多有所诟病,常常需要做貌似多余的各种配置。而Grails通过DRY和约定优先于配置的思想,使得GSP标签库的易用性非常棒。框架预定义的标签库,自然是什么配置都不需要就可以直接使用了,而利用了Groovy的动态特性的标签语法,可以相当程度地减少编码量。
编写自定义标签相对于JSP更是异常轻松。只需要通过以下命令新建自定义标签库文件,通过groovy的closure方式编写自定义标签,之后什么配置都不需要,就可以直接在GSP中使用新建的自定义标签了。
(6)成熟的J2EE Stack
Grails是一个整合了若干已有J2EE组件和框架而成的,其中包括了Spring,Spring Workflow,Hibernate,SiteMesh,JUnit,Ant等。这些都是已经相当成熟的开源组件,是开源J2EE Stack的事实规范。通过以这些组件为基础,Grails直接就能在企业应用市场占有一定地位。而社区更是为Grails贡献了不少其他J2EE开源组件的插件。对于企业来讲,Grails直接就是一个很有吸引力的快速原型开发框架,可以直接和广泛使用的已有技术很好的整合。这点可能是和Grails及Rails等类似框架相比,对手短期内无法达到的优势。
[参考文献]
[1]Kneneth Barclay,JhnSavage.Groovy ProgrammingAn Introduction for Java Devlopers[IVl】.2007.
[2]C1vdeme Keith Rocher.The Definitive Guide tO Grails[M].2006.
[3]李刚.Spring 2.0宝典[M].北京: 电子工业出版社,2006.
(作者单位:滁州市第二人民医院 安徽滁州)