摘 要 隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)瀏覽器單調(diào)的功能導(dǎo)致B/S架構(gòu)的缺點(diǎn)逐漸暴露,RIA開(kāi)發(fā)技術(shù)融合了B/S和C/S開(kāi)發(fā)架構(gòu)的優(yōu)點(diǎn)于一身,具有優(yōu)秀的網(wǎng)絡(luò)交互能力和優(yōu)美的頁(yè)面表現(xiàn)效果,其中Flex技術(shù)伴隨著自身的發(fā)展成為RIA領(lǐng)域的排頭兵。本文探討了在MVC框架Struts中應(yīng)用Flex技術(shù)的方法和特點(diǎn),說(shuō)明了Flex技術(shù)強(qiáng)大的富客戶端能力以及將Flex技術(shù)與傳統(tǒng)Struts框架集成的可行性。除此之外,簡(jiǎn)單論述了Flex技術(shù)當(dāng)前面臨的一些挑戰(zhàn)
關(guān)鍵詞 flex RIA Web程序開(kāi)發(fā)
當(dāng)前, 互聯(lián)網(wǎng)已經(jīng)成為應(yīng)用程序開(kāi)發(fā)的首選平臺(tái)。但是, 用戶對(duì)應(yīng)用程序復(fù)雜性的要求與日俱增, 而現(xiàn)在的互聯(lián)網(wǎng)應(yīng)用程序在完成復(fù)雜應(yīng)用方面卻始終不能跟上步伐。結(jié)果導(dǎo)致許多公司必須面對(duì)營(yíng)業(yè)額損失,極為不滿的客戶以及成本的增加。Web 模型是基于頁(yè)面的模型, 缺少客戶端智能功能的機(jī)制。而且, 它幾乎沒(méi)辦法完成復(fù)雜的用戶交互。這樣的技術(shù)使得Web 應(yīng)用程序使用起來(lái)非常困難, 支持成本也比較高, 并且在很多方面無(wú)法發(fā)揮Web程序的效應(yīng)。為了解決以上這些問(wèn)題, 出現(xiàn)了一種新類型的Internet 應(yīng)用程序, 即富互聯(lián)網(wǎng)應(yīng)用程序(Rich Internet Applications,RIA)。這些應(yīng)用程序從誕生開(kāi)始就結(jié)合了桌面應(yīng)用程序的反應(yīng)快、交互性強(qiáng)的優(yōu)點(diǎn)以及Web 應(yīng)用程序方面?zhèn)鞑シ秶容^廣和容易傳播的特性。RIA程序簡(jiǎn)化并改進(jìn)了Web 應(yīng)用程序的用戶交互方面的特性。這樣, 用戶開(kāi)發(fā)的應(yīng)用程序可以提供更豐富、更具有交互性的效果和功能。
RIA的概念最初由Macromedia公司(后來(lái)被Adobe收購(gòu))提出,RIA是Rich Internet Application的簡(jiǎn)稱,它將傳統(tǒng)桌面應(yīng)用程序在用戶界面功能性方面的特長(zhǎng)與Web應(yīng)用程序的普遍采納、低成本布署以及互動(dòng)多媒體通信的長(zhǎng)處集于一身,從而形成了一種可以提供更直觀、更好用戶體驗(yàn)的應(yīng)用程序。
Macromedia Flex是目前最流行的開(kāi)發(fā)RIA應(yīng)用程序的技術(shù)之一。作為一種編程技術(shù)和語(yǔ)言,F(xiàn)lex可以在企業(yè)級(jí)應(yīng)用中與J2EE技術(shù)實(shí)現(xiàn)完美的結(jié)合,從而使它在開(kāi)發(fā)中可以完全取代JSP這種在MVC架構(gòu)中用于維護(hù)視圖的技術(shù)。Flex 技術(shù)包括兩個(gè)主要功能領(lǐng)域,客戶端應(yīng)用程序框架以及服務(wù)器端運(yùn)行時(shí)服務(wù)。客戶端應(yīng)用程序框架由三方面組成,分別是:擁有豐富的用戶界面的各種組件,用于排布這些組件的基于XML的標(biāo)記語(yǔ)言MXML,以及可以處理用戶交互的面向?qū)ο缶幊陶Z(yǔ)言ActionScript和Flex類庫(kù)。程序開(kāi)發(fā)人員可以利用MXML及ActionScript編寫(xiě)Flex應(yīng)用程序,MXML用來(lái)定義應(yīng)用程序用戶界面元素,ActionScript用來(lái)定義客戶邏輯與程序控制,F(xiàn)lex類庫(kù)中包括Flex組件、管理器及行為等各種部分。利用基于Flex組件的許多開(kāi)發(fā)模型,開(kāi)發(fā)人員可以在程序中加入預(yù)建的組件,創(chuàng)建新組件或者是將預(yù)建的組件加入復(fù)合組件中。Macromedia Flash播放器可以把Flex內(nèi)置的界面顯示在客戶端。Flex運(yùn)行時(shí)服務(wù)是一個(gè)可以在J2EE應(yīng)用服務(wù)器或者Servlet容器內(nèi)安裝的展現(xiàn)服務(wù)器,并最終作為標(biāo)準(zhǔn)的.WAR文件部署,提供用于Flex應(yīng)用程序的數(shù)據(jù)管理和安全集成。
盡管Struts這樣的MVC框架很大的方便了開(kāi)發(fā)人員的工作,但是在改善用戶體驗(yàn)這點(diǎn)上并沒(méi)有達(dá)到革命性的突破:使用的仍舊是比較傳統(tǒng)的“請(qǐng)求---響應(yīng)”的處理機(jī)制,每當(dāng)客戶端發(fā)出一個(gè)請(qǐng)求,服務(wù)器端會(huì)根據(jù)客戶端發(fā)出的請(qǐng)求進(jìn)行計(jì)算并產(chǎn)生結(jié)果,重新生成HTML頁(yè)面并且發(fā)回客戶端。相比較而言,F(xiàn)lex中的文件會(huì)最終編譯成為一個(gè)二進(jìn)制的SWF文件,并且將其發(fā)送到客戶端,當(dāng)客戶端發(fā)送請(qǐng)求到服務(wù)器的時(shí)候,服務(wù)器僅僅傳送所需的數(shù)據(jù)回客戶端,并不會(huì)重新編譯SWF文件,也不會(huì)重新刷新頁(yè)面。由此可見(jiàn),將Struts技術(shù)和Flex技術(shù)結(jié)合成為必然而又自然的選擇。
為了讓Flex頁(yè)面組件與服務(wù)器端更好的通信,我們需要借助一種技術(shù):Flex Data Service(FDS)。FDS是Flex的數(shù)據(jù)服務(wù),是用Java技術(shù)開(kāi)發(fā)的服務(wù)器運(yùn)行時(shí),就是開(kāi)發(fā)人員所謂的“容器”,它本身也是作為一個(gè)應(yīng)用部署在諸如WebSphere,Tomcat等服務(wù)器上的。FDS本質(zhì)是一個(gè)“中間件”,并不處理具體的業(yè)務(wù)邏輯,而是提供諸如安全性,跨域訪問(wèn),數(shù)據(jù)格式交換等服務(wù),所以FDS并不是Flex開(kāi)發(fā)所必需的。經(jīng)過(guò)很長(zhǎng)時(shí)間的發(fā)展和改進(jìn),Adobe公司推出了兩種FDS框架,一種是Blazeds,另外一種是LiveCycle。其中第一種是開(kāi)源的,功能比較單一。第二種是一個(gè)商業(yè)項(xiàng)目,第二種的功能比第一種功能更強(qiáng)。但是第一種也在迅速的發(fā)展與完善之中。在項(xiàng)目開(kāi)發(fā)中只需將LiveCycle安裝之后的包含有Jar包和配置文件的文件夾復(fù)制到tomcat服務(wù)器上的特定位置即可使用。正確的配置完畢后Struts和FDS可以協(xié)同來(lái)完成服務(wù)器端的數(shù)據(jù)和事務(wù)處理任務(wù)。而處理之后的數(shù)據(jù)送給Flex的客戶端組件顯示。
在系統(tǒng)開(kāi)發(fā)具體操作中后臺(tái)可以采用了Struts這樣的MVC框架,前臺(tái)頁(yè)面則可以使用Flex,如果將一個(gè)Flex項(xiàng)目直接部署到Tomcat服務(wù)器上,用URL訪問(wèn)MXML文件,你只能看到響應(yīng)的源代碼(XML格式),MXML并不會(huì)被編譯成SWF格式的文件。因?yàn)門(mén)omcat會(huì)把MXML格式的文件當(dāng)作普通的XML文件,從而拒絕對(duì)其進(jìn)行處理,此時(shí)我們需要一種映射機(jī)制,將訪問(wèn)MXML的請(qǐng)求交給專門(mén)的Servlet進(jìn)行處理,這個(gè)專門(mén)的Servlet存在于之前提到的LiveCycle Data Service運(yùn)行時(shí)中。
LiveCycle中主要包含了三種數(shù)據(jù)服務(wù)技術(shù),分別是:數(shù)據(jù)管理服務(wù)、Flex消息服務(wù)、RPC(遠(yuǎn)程過(guò)程調(diào)用)服務(wù)。這三種數(shù)據(jù)服務(wù)技術(shù)各有利弊,在不同類型的數(shù)據(jù)交互中能夠各顯神通,結(jié)合他們自己的的特點(diǎn),我們介紹一種常用的RPC服務(wù)技術(shù)。
RPC這種遠(yuǎn)程過(guò)程調(diào)用服務(wù)又可以劃分三種遠(yuǎn)程服務(wù)類型,分別是:HTTP服務(wù)、Web服務(wù)和遠(yuǎn)程對(duì)象服務(wù)。其中HTTP服務(wù)主要依賴于HTTPService組件,Web服務(wù)依賴于WebServices組件,而遠(yuǎn)程對(duì)象服務(wù)借助于RemoteObject組件。而最為常用的還是借助于HTTPService組件實(shí)現(xiàn)前端Flex組件與后臺(tái)服務(wù)器的通信。
HTTPService服務(wù)是一個(gè)HTTP URI,它可以接收HTTP請(qǐng)求和發(fā)送響應(yīng)信息。比如可以使用HTTPService組件與jsp,servlet,asp這些對(duì)象進(jìn)行交互。在具體系統(tǒng)應(yīng)用中,HTTPService組件通常將其請(qǐng)求發(fā)送給后臺(tái)Struts的Action,Action組件則負(fù)責(zé)處理業(yè)務(wù)邏輯并且將數(shù)據(jù)以XML的格式返回,當(dāng)HTTP請(qǐng)求返回的時(shí)候?qū)⒂|發(fā)一個(gè)事件。此事件處理函數(shù)能夠獲取返回的XML數(shù)據(jù),將這些數(shù)據(jù)作為前臺(tái)Flex組件的數(shù)據(jù)源。LiveCycle和Struts在系統(tǒng)中充當(dāng)了Flex應(yīng)用和數(shù)據(jù)庫(kù)之間的橋梁,F(xiàn)lex應(yīng)用通過(guò)向應(yīng)用服務(wù)器發(fā)送HTTP請(qǐng)求的方式調(diào)用該橋梁,而Struts則調(diào)用數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程,將獲得的結(jié)果集以XML格式返回。
作為一項(xiàng)專注于交互技術(shù)和界面效果的RIA技術(shù),F(xiàn)lex并沒(méi)有忽視企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的重要性。通過(guò)一些中間件技術(shù)可以使Flex直接與傳統(tǒng)的MVC框架Struts完美結(jié)合。在很多系統(tǒng)開(kāi)發(fā)的實(shí)踐中,證明了Flex技術(shù)能讓網(wǎng)絡(luò)應(yīng)用程序功能更加強(qiáng)大,界面更加友好,尤其是對(duì)于那些界面需要大量的報(bào)表來(lái)展示復(fù)雜數(shù)據(jù)的業(yè)務(wù)系統(tǒng)。但是, Flex 技術(shù)在某些方面也暴露出自身的不足。例如在調(diào)用遠(yuǎn)程對(duì)象時(shí), Flex 客戶端獲取到數(shù)據(jù)后將其載入用戶界面并將其顯示出來(lái)這個(gè)過(guò)程所需時(shí)間略長(zhǎng)于傳統(tǒng)基于HTML 的網(wǎng)絡(luò)應(yīng)用程序。當(dāng)然Flex 技術(shù)以及其他RIA技術(shù)都還在飛速發(fā)展中, 毫無(wú)疑問(wèn)它們會(huì)對(duì)網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā)起到越來(lái)越大的作用。
參考文獻(xiàn):
[1]李安琪.HTML5標(biāo)準(zhǔn)實(shí)施與未來(lái)發(fā)展[J].html5技術(shù)標(biāo)準(zhǔn)與產(chǎn)業(yè)專題.
[2]嚴(yán)琦,朱治國(guó).Html5對(duì)移動(dòng)應(yīng)用的影響[J].研究與開(kāi)發(fā).
[3]易昌華.Html5發(fā)展趨勢(shì)的研究和探索[J].價(jià)值工程.
[4]龔永明.淺議web開(kāi)發(fā)的新標(biāo)準(zhǔn)html5[J].信息技術(shù).