首先下载最新的 BlazeDS
http://opensource.adobe.com/blazeds/
最新BlazeDS下载地址.
http://opensource.adobe.com/wiki/display/blazeds/Release+Builds
下面就开始使用flex 创建一个 带java 的web 工程了.
创建工程
下载的是一个 war 文件..不用解压缩. 这个在创建工程的时候用到.
创建一个 flex的工程.
选择 J2EE.
设置 flex 生成文件目录.我是直接修改成WebContent/flex_web文件夹下面
方便flex 编译后 直接放到这个地方.而不用再拷贝一下了.
设置flex 源文件 目录.
这样编译后的flex 就放到 WebContent下面的flex_web文件夹了.
而编译后的java 还放到 WEB-INF/classes文件夹下面.
并且在war里面的lib也一起拷贝过来了.
然后启动tomcat.6.0
就可以访问.
运行远程调用.
然后引用 flex 开发宝典的例子.
下载地址.:
http://as.wiley.com/WileyCDA/WileyTitle/productCd-0470287640,descCd-DOWNLOAD.html?filter=DOWNLOAD
第 chapter24 的源文件夹.
修改配置编译文件.选择工程属性.
添加源文件.
然后 修改
remoting-config.xml
添加
<destination id="helloClass"> <properties> <source>flex3Bible.ROService</source> <scope>application</scope> </properties> </destination>
添加一个远程访问的类.
类就是一个普通的pojo类.
public class ROService { public ROService() { System.out.println("初始化类."); } public String helloWorld() { System.out.println("函数被调用."); return "Hello from the world of Java"; } ...
flex调用代码:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#EEEEEE"> <mx:Script> <![CDATA[ import mx.rpc.remoting.mxml.Operation; private function callIt():void { var op:Operation = roHello.getOperation("helloWorld") as Operation; op.send(); } ]]> </mx:Script> <mx:RemoteObject id="roHello" destination="helloClass"/> <mx:Label text="Hello from BlazeDS!" fontSize="14" fontWeight="bold"/> <mx:Button label="Click to say hello" click="callIt()"/> <mx:Label text="{roHello.helloWorld.lastResult}" fontSize="14" fontWeight="bold"/> </mx:Application>
然后访问 tomcat 地址:
http://127.0.0.1:8080/chapter24_test/flex_web/CallOperation.html
发现调用不成功.弹出 debug 错误信息. (ie 下面安装了 flashplayer_10_ax_debug)
从错误信息可以很明显的发现是 访问不到服务.
'http://127.0.0.1:8080/WebContent/messagebroker/amf'"
我的tomcat 路径不是这个 .WebContent是文件夹的名字.
最后找到问题.
修改 工程属性 的 serve 配置.
修改了配置文件后. 重新编译 flex 文件.
不知道这个配置文件是否和flex生成的文件有关系.就重新编译了下.
访问页面可以调用.
显示 是从 java的服务端调用.
总结:
工具配置生成.做了好多事情.剩下的就是在.remoting-config.xml里面添加自己的java类.然后在flex里面调用.
<mx:RemoteObject id="roHello" destination="helloClass"/> 进行调用下.
这样就可以通信了.工程里面还有几个例子.大同小异.