學習筆記 用Flash和Flex創建WebService客戶端
在學習Flex的過程中,你可能會遇到用Flash和Flex創建WebService客戶端的概念,這里和大家分享一下,希望本文的介紹能讓你有所收獲。
用Flash和Flex創建WebService客戶端
在所有的各種各樣的豐富了Web瀏覽體驗的瀏覽器附件中,最有用的當然是幾乎無所不在的Flashplayer。這個瀏覽器插件最先受到高度關注是在1996年發布的MacromediaFlash1.0,然后每隔一小段時間就會做重大改進,現在的版本是第9版。在2005年底Macromedia和Adobe合并,所以當前的插件的全稱是AdobeFlashPlayer9。
Flashplayer執行可由多種制作技術創建的SWF(用于ShockWaveFlash)文件。SWF文件包括圖片、布局和邏輯信息,但是應用也可以從網絡或本地文件系統加載數據和程序。程序員只要做少量的工作就可以達到壯觀的效果。
被限制于瀏覽器插件環境限制了豐富互聯網應用程序(RIA)的可能應用?;谶@一認識,Adobe正致力于一個被稱作AdobeIntegratedRuntime或AIR的單獨的桌面應用環境,它以前的代號是Apollo。
Flex語言
AdobeFlex在.MXML文件里為FlashPlayer的XML格式定義提供了用戶界面。Java程序員對控制像“網格”布局這樣的組件布局很熟悉。很合理的,默認模式被定義為讓你從目前就可以運行,之后把布局更完善的狀態開始。
MXML文件,可以由任何文本編輯器或專門的IDE創建,它由Flex編譯器編譯到可由Flashplayer執行的SWF文件中去。在FlexSoftwareDevelopmentKit(SDK)中提供了一個免費的編譯器和許多展示Flash界面能力的例子。
與Flex1.0版本的對比之下,Flex2.0SDK的許可條款刪除了所有對采用一個Macromedia服務器來運行SWF文件的要求。當然,Adobe將很高興賣給你FlexBuilderIDE,但是你可以免費體驗和展示你的Flash創作。
據預計,FlexSDK不久就會作為MozillaPublicLicense之下的一個開源的來發布。這是一個商業應用的友好許可,它反映了Adobe想要創建有活力的Flex開發者社區的愿望。
第一個開源版本將被命名為Flex3,目前處于測試版,正式版預計將于秋季發布。
ScriptingFlexapplications
在FlashPlayer中處理用戶事件、邏輯和數據是由ActionScript來完成的,它是一個基于ECMA-262國際標準的腳本語言,JavaScript就是基于這個標準。雖然名義上為“腳本”語言,但封裝于一個Flash應用內的ActionScript是編譯成字節碼,由虛擬機執行,就像Java和.NET。ActionScript函數可以和同一個網頁上的JavaScript程序通信。
最新版本ActionScript3.0,于2006年6月2日與Flex2和FlashPlayer9一起發布,它做了重大改寫,能力得到了很大提高。ActionScript3.0實現ECMAScriptforXML(E4X)標準ECMA-357來處理XML作為一個內置數據類型,從而幫助Ajax動態數據獲得和處理Webservices。
ActionScript3編譯成一個新的字節碼scheme,它和以前所有版本都不兼容,所以目前的FlashPlayer插件實際上包含2個虛擬機來和以前的scripts以及最新版的一起工作。為了獲得更高的性能,ActionScript3采用“justintime”(JIT)編譯器將字節碼編譯成原始機器代碼。#p#
一個簡單的Flex例子
現在讓我們看一個簡單的用于Flash應用的Flex腳本。一個腳本必須是一個完整的、將mx:Application標簽作為根元素的XML文檔。在這個例子中,所有的界面組件都被包括在一個簡單的"mx:Panel"標簽中。注意mx:Button標簽指定一個"click"屬性擁有"news.send()"的值,這定義了當按鈕被點擊時會調用事件處理器。ActionScript遵循W3CDOMlevel3事件命名習慣,所以這個事件是"click"而不是"onclick"。
- <?xmlversionxmlversion="1.0"encoding="utf-8"?>
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"xmlns="*">
- <mx:Panelidmx:Panelid="holder"width="500"height="500">
- <mx:Labelidmx:Labelid="title"fontSize="14"fontStyle="bold"
- text="Clickforcurrentnews"/>
- <mx:Buttonidmx:Buttonid="reload"label="Reload"width="200"
- click="news.send()"/>
- <mx:TextAreaidmx:TextAreaid="mainTxt"width="100%"height="400">
- <mx:htmlText><![CDATA[Ready]]></mx:htmlText>
- </mx:TextArea>
- </mx:Panel>
- <mx:HTTPServiceidmx:HTTPServiceid="news"method="GET"
- url="http://www.wbrogdenx.com/news.html"
- resultFormat="text"
- result="newsResultHandler(event);"
- fault="newsFaultHandler(event);"/>
- <mx:Script>
- <![CDATA[
- importmx.rpc.events.FaultEvent;
- importmx.rpc.events.ResultEvent;
- publicfunctionnewsResultHandler(event:ResultEvent):void
- {mainTxt.htmlText=event.resultasString;
- }
- publicfunctionnewsFaultHandler(event:FaultEvent):void
- {mainTxt.text=event.fault.message;
- }
- ]]>
- </mx:Script>
- </mx:Application>
mx:HTTPService標簽中的代碼是發送一個請求到指定的URL和定義返回的數據怎樣處理,在這個示例中是作為純文本處理。如果ResultFormat是"e4x",那么結果將是XML格式。實際上發送一個請求和獲得一個結果的過程只有在通過鼠標點擊反映在mx:Button上,然后調用隱含的send()方法的情況下才發生。這一過程終止于調用正常結果處理方法或出錯處理方法。Flex提供其他類型的遠程服務訪問,我選擇這個例子是因為它是解釋這個的最簡單的例子。
ActionScript函數被包括在一對mx:Script標簽內,使用了CDATA,以便可以使用像<這樣的特殊字符而不會干擾XML解析。你還可以引入外部ActionScript文檔。#p#
關于SDK的更多信息.
一旦你安裝了SDK,你就可以編譯所提供的應用示例。這些示例不是微不足道的應用,他們是學習Flex和ActionScript的很好的教材。尤其是"ComponentExplorer"應用列出因工作實例而運行著的各種Flex組件和源代碼。
除了編譯器和示例,SDK還包含了兩個調試版本的AdobeFlashPlayer9插件,一個用于IE,另一個用于其他的所有瀏覽器。
分配Flex應用
Flex應用可以作為SWF文件預編譯,然后直接服務于FlashPlayer,或動態編譯然后由專門的服務器組裝。以HTML形式內嵌到FlashPlayer中,以此來創建一個豐富的網絡應用不是那么簡單的。因為與其他許多瀏覽器不兼容,所以IE和其他瀏覽器比如Netscape是不同的。瀏覽器安全設置會妨礙JavaScript和ActionScript的運行。
RIA競爭
正如我以前的文章中談到的,Sun的JavaFX腳本語言意圖將十分靈活和可定制的"Swing"組件庫帶到RIA的舞臺上。JavaFX有個更大的Java函數庫在必要的時候使用,而Flex擅長壯觀的用戶界面效果。
在今年的四月,Microsoft發布了一個瀏覽器插件,名為"Silverlight",它很顯然是為了和FlashPlayer競爭。Silverlightplayer1.0目前可用于Windows和Mac瀏覽器。因為Microsoft可以確保新的電腦都安裝有Silverlight并自動更新,所以它終將變得極為廣泛。
【編輯推薦】