學(xué)習(xí)筆記 用Flash和Flex創(chuàng)建WebService客戶端
在學(xué)習(xí)Flex的過程中,你可能會(huì)遇到用Flash和Flex創(chuàng)建WebService客戶端的概念,這里和大家分享一下,希望本文的介紹能讓你有所收獲。
用Flash和Flex創(chuàng)建WebService客戶端
在所有的各種各樣的豐富了Web瀏覽體驗(yàn)的瀏覽器附件中,最有用的當(dāng)然是幾乎無所不在的Flashplayer。這個(gè)瀏覽器插件最先受到高度關(guān)注是在1996年發(fā)布的MacromediaFlash1.0,然后每隔一小段時(shí)間就會(huì)做重大改進(jìn),現(xiàn)在的版本是第9版。在2005年底Macromedia和Adobe合并,所以當(dāng)前的插件的全稱是AdobeFlashPlayer9。
Flashplayer執(zhí)行可由多種制作技術(shù)創(chuàng)建的SWF(用于ShockWaveFlash)文件。SWF文件包括圖片、布局和邏輯信息,但是應(yīng)用也可以從網(wǎng)絡(luò)或本地文件系統(tǒng)加載數(shù)據(jù)和程序。程序員只要做少量的工作就可以達(dá)到壯觀的效果。
被限制于瀏覽器插件環(huán)境限制了豐富互聯(lián)網(wǎng)應(yīng)用程序(RIA)的可能應(yīng)用。基于這一認(rèn)識(shí),Adobe正致力于一個(gè)被稱作AdobeIntegratedRuntime或AIR的單獨(dú)的桌面應(yīng)用環(huán)境,它以前的代號(hào)是Apollo。
Flex語言
AdobeFlex在.MXML文件里為FlashPlayer的XML格式定義提供了用戶界面。Java程序員對(duì)控制像“網(wǎng)格”布局這樣的組件布局很熟悉。很合理的,默認(rèn)模式被定義為讓你從目前就可以運(yùn)行,之后把布局更完善的狀態(tài)開始。
MXML文件,可以由任何文本編輯器或?qū)iT的IDE創(chuàng)建,它由Flex編譯器編譯到可由Flashplayer執(zhí)行的SWF文件中去。在FlexSoftwareDevelopmentKit(SDK)中提供了一個(gè)免費(fèi)的編譯器和許多展示Flash界面能力的例子。
與Flex1.0版本的對(duì)比之下,F(xiàn)lex2.0SDK的許可條款刪除了所有對(duì)采用一個(gè)Macromedia服務(wù)器來運(yùn)行SWF文件的要求。當(dāng)然,Adobe將很高興賣給你FlexBuilderIDE,但是你可以免費(fèi)體驗(yàn)和展示你的Flash創(chuàng)作。
據(jù)預(yù)計(jì),F(xiàn)lexSDK不久就會(huì)作為MozillaPublicLicense之下的一個(gè)開源的來發(fā)布。這是一個(gè)商業(yè)應(yīng)用的友好許可,它反映了Adobe想要?jiǎng)?chuàng)建有活力的Flex開發(fā)者社區(qū)的愿望。
第一個(gè)開源版本將被命名為Flex3,目前處于測(cè)試版,正式版預(yù)計(jì)將于秋季發(fā)布。
ScriptingFlexapplications
在FlashPlayer中處理用戶事件、邏輯和數(shù)據(jù)是由ActionScript來完成的,它是一個(gè)基于ECMA-262國際標(biāo)準(zhǔn)的腳本語言,JavaScript就是基于這個(gè)標(biāo)準(zhǔn)。雖然名義上為“腳本”語言,但封裝于一個(gè)Flash應(yīng)用內(nèi)的ActionScript是編譯成字節(jié)碼,由虛擬機(jī)執(zhí)行,就像Java和.NET。ActionScript函數(shù)可以和同一個(gè)網(wǎng)頁上的JavaScript程序通信。
最新版本ActionScript3.0,于2006年6月2日與Flex2和FlashPlayer9一起發(fā)布,它做了重大改寫,能力得到了很大提高。ActionScript3.0實(shí)現(xiàn)ECMAScriptforXML(E4X)標(biāo)準(zhǔn)ECMA-357來處理XML作為一個(gè)內(nèi)置數(shù)據(jù)類型,從而幫助Ajax動(dòng)態(tài)數(shù)據(jù)獲得和處理Webservices。
ActionScript3編譯成一個(gè)新的字節(jié)碼scheme,它和以前所有版本都不兼容,所以目前的FlashPlayer插件實(shí)際上包含2個(gè)虛擬機(jī)來和以前的scripts以及最新版的一起工作。為了獲得更高的性能,ActionScript3采用“justintime”(JIT)編譯器將字節(jié)碼編譯成原始機(jī)器代碼。#p#
一個(gè)簡(jiǎn)單的Flex例子
現(xiàn)在讓我們看一個(gè)簡(jiǎn)單的用于Flash應(yīng)用的Flex腳本。一個(gè)腳本必須是一個(gè)完整的、將mx:Application標(biāo)簽作為根元素的XML文檔。在這個(gè)例子中,所有的界面組件都被包括在一個(gè)簡(jiǎn)單的"mx:Panel"標(biāo)簽中。注意mx:Button標(biāo)簽指定一個(gè)"click"屬性擁有"news.send()"的值,這定義了當(dāng)按鈕被點(diǎn)擊時(shí)會(huì)調(diào)用事件處理器。ActionScript遵循W3CDOMlevel3事件命名習(xí)慣,所以這個(gè)事件是"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標(biāo)簽中的代碼是發(fā)送一個(gè)請(qǐng)求到指定的URL和定義返回的數(shù)據(jù)怎樣處理,在這個(gè)示例中是作為純文本處理。如果ResultFormat是"e4x",那么結(jié)果將是XML格式。實(shí)際上發(fā)送一個(gè)請(qǐng)求和獲得一個(gè)結(jié)果的過程只有在通過鼠標(biāo)點(diǎn)擊反映在mx:Button上,然后調(diào)用隱含的send()方法的情況下才發(fā)生。這一過程終止于調(diào)用正常結(jié)果處理方法或出錯(cuò)處理方法。Flex提供其他類型的遠(yuǎn)程服務(wù)訪問,我選擇這個(gè)例子是因?yàn)樗墙忉屵@個(gè)的最簡(jiǎn)單的例子。
ActionScript函數(shù)被包括在一對(duì)mx:Script標(biāo)簽內(nèi),使用了CDATA,以便可以使用像<這樣的特殊字符而不會(huì)干擾XML解析。你還可以引入外部ActionScript文檔。#p#
關(guān)于SDK的更多信息.
一旦你安裝了SDK,你就可以編譯所提供的應(yīng)用示例。這些示例不是微不足道的應(yīng)用,他們是學(xué)習(xí)Flex和ActionScript的很好的教材。尤其是"ComponentExplorer"應(yīng)用列出因工作實(shí)例而運(yùn)行著的各種Flex組件和源代碼。
除了編譯器和示例,SDK還包含了兩個(gè)調(diào)試版本的AdobeFlashPlayer9插件,一個(gè)用于IE,另一個(gè)用于其他的所有瀏覽器。
分配Flex應(yīng)用
Flex應(yīng)用可以作為SWF文件預(yù)編譯,然后直接服務(wù)于FlashPlayer,或動(dòng)態(tài)編譯然后由專門的服務(wù)器組裝。以HTML形式內(nèi)嵌到FlashPlayer中,以此來創(chuàng)建一個(gè)豐富的網(wǎng)絡(luò)應(yīng)用不是那么簡(jiǎn)單的。因?yàn)榕c其他許多瀏覽器不兼容,所以IE和其他瀏覽器比如Netscape是不同的。瀏覽器安全設(shè)置會(huì)妨礙JavaScript和ActionScript的運(yùn)行。
RIA競(jìng)爭(zhēng)
正如我以前的文章中談到的,Sun的JavaFX腳本語言意圖將十分靈活和可定制的"Swing"組件庫帶到RIA的舞臺(tái)上。JavaFX有個(gè)更大的Java函數(shù)庫在必要的時(shí)候使用,而Flex擅長(zhǎng)壯觀的用戶界面效果。
在今年的四月,Microsoft發(fā)布了一個(gè)瀏覽器插件,名為"Silverlight",它很顯然是為了和FlashPlayer競(jìng)爭(zhēng)。Silverlightplayer1.0目前可用于Windows和Mac瀏覽器。因?yàn)镸icrosoft可以確保新的電腦都安裝有Silverlight并自動(dòng)更新,所以它終將變得極為廣泛。
【編輯推薦】
- Flex動(dòng)態(tài)讀取外部XML文件
- Flex主題創(chuàng)建及支持的樣式設(shè)置方式
- 全面認(rèn)識(shí)Flex應(yīng)用程序的六大元素
- 揭開Flex正則表達(dá)式的神秘面紗
- Flex數(shù)據(jù)綁定及其使用頻繁的幾種情況