在学习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并自动更新,所以它终将变得极为广泛。
【编辑推荐】