上一篇博文 中已经介绍了如何在同一项目中使用BlazeDS实现在同一项目中的Flex与Java通信,然而在很多的实际开发中可能需要将Java端与Flex端分放在两个不同的项目中,要实现此功能也非常简单,只需简单几步配置即可。
- 新建Flex工程。
- 点击“下一步”,“目标运行时”选择配置好的Tomcat,配置好BlazeDS的WAR文件,点击“Finish”。
- 工程上“右键”-> "Flex 服务器",“应用服务器类型”项选择“J2EE”,勾选“使用远程对象访问服务”,选择第二项“BlazeDS”。
- 配置“服务器位置”,“根文件夹”:%workspace_path%\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\%project_name%; "根URL":http://localhost:8080/%project_name%; "上下文根目录":/%project_name%。
- 点击“验证配置”,出现“Web根文件夹与根URL有效”的信息时,表明已经验证成功,点击“OK”。
- 在Flex工程的默认生成的“工程名.mxml”文件中粘入如下代码
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:mx="http://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:fx="http://ns.adobe.com/mxml/2009"> <fx:Declarations> <s:RemoteObject id="ro" destination="Hello" result="resultHandler(event)"/> </fx:Declarations> <fx:Script > <![CDATA[ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; [Bindable] private var helloResult:String; private function sayHello():void { ro.sayHello(inputText.text); } private function resultHandler(event:ResultEvent):void { helloResult = event.result as String; } ]]> </fx:Script > <s:HGroup> <s:Label text="Name:" id="nameLabel"/> <s:TextInput id="inputText"/> <s:Button label="say Hello" id="nameButton" click="sayHello()"/> <s:Label id="resultLabel" text="{helloResult}"/> </s:HGroup> </s:Application>
- 将java工程部署到服务器中启动服务器,右键点击Flex工程中的“工程名.mxml”,“run as”->“web 应用程序”,测试成功。
- 在步骤7运行过程中可能会出现类似“[RPC Fault faultString="发送失败" faultCode="Client.Error.MessageSend".......”的错误可以参考 http://bbs.airia.cn/Flash_Builder_4/thread-11228-1-1.html 的方法进行解决。也可以在mxml中的RemoteObject对象定义时加上
endpoint="messagebroker/amf"
属性。