梁小玲
[摘要]當今時代,web應(yīng)用日益廣泛,且開發(fā)技術(shù)不斷發(fā)展, web開發(fā)中使用最多的框架大多數(shù)都是基于J2EE平臺。但J2EE應(yīng)用框架隨著用戶需求的多樣化、逐漸膨脹的XML配置管理文件以及不斷加入的各種組件,這種框架體系變得越來越臃腫,其開發(fā)和運行速度很難滿足開發(fā)者的需求。Grails框架正是為了解決上述問題,為了極大地滿足程序員開發(fā)和運行速度上的需求而提出的解決方案。
[關(guān)鍵詞]Web Grails 開發(fā)框架
自互聯(lián)網(wǎng)出現(xiàn)以來,對Web應(yīng)用技術(shù)的探討與爭論就從來沒有停止過。在多年的發(fā)展后,Web應(yīng)用也迎來了一次深度的革新。J2EE所具有的開放性、跨平臺性使得它在Web應(yīng)用開發(fā)平臺中的地位如日中天,各種各樣的開發(fā)框架在該平臺上層出不窮。Grails框架自身包含了構(gòu)建web應(yīng)用的所有組件,可以獨立地、高效地開發(fā)應(yīng)用程序,使得開發(fā)過程簡單而快捷,極大地迎合了開發(fā)者的需求。相比較J2EE應(yīng)用框架,該框架在開發(fā)效率和web應(yīng)用部署方面體現(xiàn)了強大的優(yōu)勢。
傳統(tǒng)Web應(yīng)用框架概述
Web應(yīng)用框架,Web application framework,用來支持動態(tài)網(wǎng)站、網(wǎng)絡(luò)應(yīng)用程序及網(wǎng)絡(luò)服務(wù)的開發(fā)。這種框架有助于減輕網(wǎng)頁開發(fā)時共通性活動的工作負荷,例如許多框架提供數(shù)據(jù)庫訪問接口、標準樣板以及會話管理等,可提升代碼的可再用性。
框架(Framework)是整個或部分系統(tǒng)的可重用設(shè)計,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實例間交互的方法;另一種定義認為,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。前者是從應(yīng)用方面而后者是從目的方面給出的定義??梢哉f,一個框架是一個可復(fù)用的設(shè)計構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個設(shè)計、協(xié)作構(gòu)件之間的依賴關(guān)系、責任分配和控制流程,表現(xiàn)為一組抽象類以及其實例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文(Context)關(guān)系。因此構(gòu)件庫的大規(guī)模重用也需要框架。
框架的最大好處就是重用。面向?qū)ο笙到y(tǒng)獲得的最大的復(fù)用方式就是框架,一個大的應(yīng)用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。
目前Web應(yīng)用系統(tǒng)開發(fā)框架有很多種,新的開發(fā)框架也不斷出現(xiàn),例如最常被提及的也是最著名的MVC開源框架之一的Struts,輕量級框架WebWork,另外Spring,cocoon等。這些開發(fā)框架的性能各有特點,它們的問世在很大程度上加快了Web開發(fā)框架發(fā)展的速度,也多個方面為Web應(yīng)用提供多種服務(wù)。
傳統(tǒng)Web應(yīng)用框架的缺點
對于Java Web開發(fā)人員來說,一直期望著能出現(xiàn)一個無須太多配置的Web應(yīng)用框架,能夠幫助我們直接來完成業(yè)務(wù)邏輯處理,而不需要了解堆積如山的配置選項,雖然上述現(xiàn)有框架(如Struts、Spring、JSF等),越來越多地采用代碼生成方式來開發(fā)Web應(yīng)用程序,可惜這些代碼生成工具只能用來生成相關(guān)的環(huán)境配置信息或只能用于應(yīng)用程序的初期開發(fā)階段。
而如今Web開發(fā)框架層出不窮,每個新的框架的出現(xiàn)都會在原有經(jīng)典框架的基礎(chǔ)上有所改進、有所創(chuàng)新,本文將要講述的Groovy on Grails應(yīng)用框架也是如此。
Grails Web應(yīng)用框架概述
在Web應(yīng)用日益普遍和復(fù)雜的今天,使用Web應(yīng)用框架、選擇一種好的Web應(yīng)用框架進行系統(tǒng)開發(fā),對于提高系統(tǒng)的開發(fā)效率,增強系統(tǒng)的正確性、健壯性都起到了極其重要的作用。目前人們提出了各種Web應(yīng)用系統(tǒng)開發(fā)框架,但這些框架一般只封裝了較為底層的技術(shù)細節(jié),軟件復(fù)用的粒度較小。我們提出了一種新型的Groovy on Grails的Web應(yīng)用開發(fā)框架。本框架較好地實現(xiàn)了對表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)層的分離和封裝,并方便地提供對事務(wù)處理、身份認證、權(quán)限控制等關(guān)鍵服務(wù)的支持。我們將本框架應(yīng)用于“湖北高級人民法院信訪案件管理系統(tǒng)”項目的實際開發(fā)之中,實踐表明,本框架能夠較好地支持大型的Web應(yīng)用系統(tǒng),大大提高軟件開發(fā)效率。
用Groovy語言編寫的Grails框架以其開發(fā)快捷、簡單易用的特點極大地簡化了開發(fā)過程,降低了開發(fā)成本,同時較好地兼顧開發(fā)和運行效率,近年來逐漸成為Web應(yīng)用開發(fā)者關(guān)注的焦點。
Grails是一個較新的Web應(yīng)用開發(fā)框架,它是用Groovy語言編寫的全棧型(full--stack)、開源的Web框架。Grails的目標就是超越其它語言在Web領(lǐng)域的獨占,為此Grails把目標集中在以下三個方面:
①與Java平臺緊密集成;
②提供簡單的接口,同時保持調(diào)用底層Java框架的靈活性及其特性;
③改進Java平臺已有的缺點。
Groovy成為Java平臺上的通用語言這一目標,與Grails成為通用Web框架的目標不謀而合。他們都希望盡可能使用Java,開發(fā)人員不需要重新學習就可以過渡到動態(tài)語言的開發(fā)中。Grails通過定義簡單的接口來提供上述框架的功能,但仍然可以分別獨立使用各框架。圖2.1表明Grails和這些框架以及企業(yè)級Java之間的關(guān)系。Groovy雖然可以在Grails之外與Sp訂ng、Hibernate等的API協(xié)作,但Grails仍然控制著企業(yè)級Java和Groovy高級特性之間的聯(lián)合,以便能為構(gòu)建Web應(yīng)用提供一個簡單的環(huán)境。
Grails優(yōu)越性體現(xiàn)
(1)DRY(Dont RepeatYourself,不要重復(fù)自己),約定優(yōu)于配置(Convention over Configuration)
DRY和約定優(yōu)先于配置的思想,是由Rails興起并迅速被廣泛接收和欣賞的Web框架新思路。Grails作為J2EE世界的Rails,把這些最前沿的設(shè)計理念帶入已顯得陳舊的J2EE社區(qū),擁有鮮明突出的特點,以及由此帶來的優(yōu)秀的開發(fā)效率。
DRY的思想是避免重復(fù)的信息。Grails中的DRY主要體現(xiàn)在URL映射定義上(URLMappings.groovy)。在URLMappings.groovy中定義了應(yīng)用的各個URL以后,通過使用Grails預(yù)定義的動態(tài)Con仃oller方法和GSP標簽,開發(fā)者就不必再把程序URL硬編碼在各處。比如使用GSP標簽
在約定優(yōu)于配置方面,Grails和Rails非常相似。所謂約定優(yōu)于配置,就是按照框架約定的方式來組織資源,就可以免去任何額外的配置。比如Grails的自定義標簽,存放在應(yīng)用目錄下的grails-app/taglib路徑下,并以XXXTagLib.groovy的方式命名,就能無需任何配置就可以在GSP里使用這些標簽庫了。另外還有Service類,Job類,包括整個Grails應(yīng)用的目錄結(jié)構(gòu)。
(2)JVM
通過運行在JVM之上,Grails擁有一個經(jīng)過多年開發(fā),已經(jīng)非常成熟,業(yè)界標準級別的運行環(huán)境。JVM的穩(wěn)定性和最新版本的性能都已經(jīng)相當成熟。相比最直接的比較對象Rails,Grails在運行環(huán)境性能上的優(yōu)勢是比較明顯的。另外,已有的Java可重用組件基本都可以直接使用于Grails,無疑也是Grails的一個明顯優(yōu)勢。
(3)Groovy語言
Grails和Groovy語言的關(guān)系是密不可分的。對于Groovy來說,Grails是其最大的殺手級應(yīng)用。而對Grails來說,Groovy是其能夠?qū)崿F(xiàn)靈活多變的快速開發(fā),區(qū)別于其他運行于JVM之上的Web框架的核心技術(shù)。
Groovy的動態(tài)特性是其最大亮點,在這方面幾乎不輸于Ruby等其他熱門的動態(tài)語言。meta-programming,closure等等熱門的動態(tài)語言特性在Groovy中都有很好的實現(xiàn)。而且Groovy程序能夠編譯為JVM字節(jié)碼的.class文件,直接運行在JVM上,Groovy程序的性能能夠得到一定的幫助。Groovy能夠和Java混合編寫,混合編譯,使得Java程序員能不用浪費自己在Java語言上的大量投入,更輕松快捷地進入Groovy的世界。使用Groovy編程,相比使用Java來說快速輕松得多,對為數(shù)眾多的Java程序員頗有吸引力。
(4)插件系統(tǒng)
Grails的插件系統(tǒng)也是其亮點之一。首先,和Rails,Django等Web框架類似,基于微內(nèi)核的思想,插件(可重用模塊)是框架的一等公民。Grails除了核心模塊以外的功能幾乎都是通過插件方式實現(xiàn)的。實際上,一個Grails插件和一個Grails應(yīng)用基本是完全一樣的,同樣可以使用grails run-app命令來運行。區(qū)別僅在于一個插件的根目錄下需要提供一個FooPlugin.groovy文件,提供插件的一些描述信息。
Grails插件基本可以做任何事情,Grails社區(qū)已經(jīng)提供了各式各樣的插件,發(fā)布在Grails官方插件源上。查看現(xiàn)有的官方插件,可以執(zhí)行下面的命令。
(5)GSP和標簽庫
Grails前端開發(fā)使用的是GSP(Grails Server Pages),開發(fā)者可以使用Grails特定的模板語法編寫GSP動態(tài)頁面,并且可以直接使用Groovy腳本或是各種預(yù)定義和自定義標簽庫(taglib)。這么看起來和JSP區(qū)別不大,而實際上,Grails帶給開發(fā)者的是遠比名字上的區(qū)別大得多的開發(fā)效率上的進步。
首先,雖然不是推薦的做法,但是直接在GSP中使用Groovy腳本的話就直接利用了Groovy快速開發(fā)的優(yōu)勢。
另外,J2EE開發(fā)者對于JSP標簽庫的易用性大多有所詬病,常常需要做貌似多余的各種配置。而Grails通過DRY和約定優(yōu)先于配置的思想,使得GSP標簽庫的易用性非常棒??蚣茴A(yù)定義的標簽庫,自然是什么配置都不需要就可以直接使用了,而利用了Groovy的動態(tài)特性的標簽語法,可以相當程度地減少編碼量。
編寫自定義標簽相對于JSP更是異常輕松。只需要通過以下命令新建自定義標簽庫文件,通過groovy的closure方式編寫自定義標簽,之后什么配置都不需要,就可以直接在GSP中使用新建的自定義標簽了。
(6)成熟的J2EE Stack
Grails是一個整合了若干已有J2EE組件和框架而成的,其中包括了Spring,Spring Workflow,Hibernate,SiteMesh,JUnit,Ant等。這些都是已經(jīng)相當成熟的開源組件,是開源J2EE Stack的事實規(guī)范。通過以這些組件為基礎(chǔ),Grails直接就能在企業(yè)應(yīng)用市場占有一定地位。而社區(qū)更是為Grails貢獻了不少其他J2EE開源組件的插件。對于企業(yè)來講,Grails直接就是一個很有吸引力的快速原型開發(fā)框架,可以直接和廣泛使用的已有技術(shù)很好的整合。這點可能是和Grails及Rails等類似框架相比,對手短期內(nèi)無法達到的優(yōu)勢。
[參考文獻]
[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].北京: 電子工業(yè)出版社,2006.
(作者單位:滁州市第二人民醫(yī)院 安徽滁州)