最近项目中需要Flex与Java进行通信,初步选定使用BlazeDS。看见网上很多HelloWorld的例子都没运行起来,所以决定把自己的经验总结一下分享给大家。
- 配置Flex和Java Web项目的开发的开发环境,这里就不再赘述了,我使用的是Eclipse JavaEE + Flex Builder。
- 下载BlazeDS压缩包,好像有三种版本(Turkey、bin、source), 我用的是bin,解压后里面有一个blazeds.war。
- 在Eclipse中新建一个Flex Project名为BlazeApp,服务器选J2EE。
- J2EE Settings中的Flex war File选择BlazeDS解药后得到的blazeds.war。
- 建完工程后需要修改一下Context root,右键-> Properties -> Flex Server -> Context root 改成/BlazeApp.
- 在src目录下新建包demo,在包下新建类HelloWorld,代码如下
Java代码
-
- package demo;
-
- public class HelloWorld {
-
- public String sayHello(String name){
- System.out.println("Hello "+name);
- return "Hello "+name;
- }
- }
package demo;
public class HelloWorld {
public String sayHello(String name){
System.out.println("Hello "+name);
return "Hello "+name;
}
}
- 修改WebContent/WEB-INF/flex/remoting-config.xml,在其中加入
Xml代码
-
- <destination id="Hello">
- <properties>
- <source>demo.HelloWorld</source>
- </properties>
- </destination>
<destination id="Hello">
<properties>
<source>demo.HelloWorld</source>
</properties>
</destination>
- 修改BlazeApp.mxml,代码如下
Mxml代码
-
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
- <mx: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;
- }
-
- ]]>
- </mx:Script >
- <mx:RemoteObject id="ro" destination="Hello" result="resultHandler(event)"/>
- <mx:HBox x="0" y="10" width="100%">
- <mx:Label text="Name:" id="nameLabel"/>
- <mx:TextInput id="inputText"/>
- <mx:Button label="say Hello" id="nameButton" click="sayHello()"/>
- <mx:Label id="resultLabel" text="{helloResult}"/>
- </mx:HBox>
-
- </mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx: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;
}
]]>
</mx:Script >
<mx:RemoteObject id="ro" destination="Hello" result="resultHandler(event)"/>
<mx:HBox x="0" y="10" width="100%">
<mx:Label text="Name:" id="nameLabel"/>
<mx:TextInput id="inputText"/>
<mx:Button label="say Hello" id="nameButton" click="sayHello()"/>
<mx:Label id="resultLabel" text="{helloResult}"/>
</mx:HBox>
</mx:Application>
- 运行项目,在浏览器中输入http://localhost:8080/BlazeApp/BlazeApp.html,试试看~
注:在Flex4中运行上面例子可能会报错,需要在定义RemoteObject的的时候加上如下参数
Xml代码
- endpoint="messagebroker/amf"