(注:这是我将自己网易上的文章搬过来了,前一阵子在网易博客写的,感觉还是博客园好一些,网易博客地址:http://flex4.blog.163.com/ )
下面记录完整的flex4连接java web services步骤:
1、打开MyEclipse8.5 ,新建Web project项目,名称自定义,我这里写为Demo ,如下图:

点击“Finish”,继续下一步。
2、下载 BlazeDS第三方工具,下载地址为http://opensource.adobe.com/wiki/display/blazeds/download ,这是用来连接java和flex的第三方工具,开源免费的。(附件一)
解压后的文件夹打开,将blazeds.war文件用RAR解压后,复制WEB-INF文件夹到你刚刚新建的工程文件夹下,替换原有的WEB-INF文件夹(先删除原先的,再粘贴刚刚复制的,不要合并文件夹) ,然后在MyEclipse8.5中刷新项目,整个项目结构如下图:

然后在src上定义新的包com.demo.tee ,并且在包内新建Hee类,

然后打开WEB-INF--->flex----remoting-config.xml文件,在现有代码下面添加如下配置
<destination id="Hee"> <properties> <source>com.demo.tee.Hee</source> </properties> </destination> <!-- id="Hee",这个Hee就是我们刚刚新建的那个类名,这个名字至关重要 -->
配置后如下图

继续下一步,在刚刚新建的类中编写如下代码:
package com.demo.tee; public class Hee { /** * 我们模拟一个简单的登录过程,flex端会通过BlazeDS插件连接java的这个方法完成验证,login方法会返回 * 验证结果,下面简单的代码不再解释,会程序的都可以看懂 * @param user * @param pass * @return */ public String login(String user,String pass){ if(user.equals("admin")&&pass.equals("admin")){ return "OK"; }else{ return "NO"; } } }
然后将此web应用发布到tomcat服务器上,发布过程同往常一样,不详述3、在falsh builder4.5中新建flex项目,名称自定义,我这里写为TestDemo,应用程序类型默认为WEB,SDK默认,

点击“下一步”,服务器类型选择“java”,勾选“使用远程对象访问服务”,选中“BlazeDS” ,根文件夹选你tomcat---》webapp文件夹夹下新发布的Demo文件夹,并且修改相应的根URL以及上下文根目录

这个时候启动你的tomcat,点击“验证配置”,看顶部提示

这样表示配置成功,点击完成,继续下一步
编辑器默认会打开TestDemo.mxml 编辑此文件代码如下
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <!-- id="test",表示在flex中我们可以用test来调用java代码Hee类中的一些方法 --> <!-- destination="Hee"中的Hee对应上面XML中配置的Hee --> <s:RemoteObject id="test" destination="Hee" result="resultHandler(event)" endpoint="/Demo/messagebroker/amf"> </s:RemoteObject> </fx:Declarations> <fx:Script> <![CDATA[ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.controls.Alert; //调用java服务器端的方法 private function login():void{ //通过RemoteObject的对象test,直接调用java端的登录方法Login() test.login(loginusername.text,loginpassword.text); } //调用成功后处理事件 private function resultHandler(event:ResultEvent):void{ //显示java服务器返回的结果 var helloResult:String=event.result as String; /** * 如果服务器返回OK,则跳转页面 * */ if(event.result.valueOf()=="OK"){ ExternalInterface.call("function() " + "{window.location.href='http://localhost:8080/Demo/Demo-debug/Index.html';} "); }else{ Alert.show(helloResult,"提示信息"); } } ]]> </fx:Script> <s:layout> <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"> </s:HorizontalLayout> </s:layout> <s:Panel id="loginpanel" x="116" y="46" width="521" height="282" color="#2148ED" fontFamily="中易宋体" fontSize="20" fontWeight="bold" title="系统登录"> <s:Button id="loginbtn" x="147" y="200" width="80" height="40" label="登录" color="#050505" fontSize="21" click="login()"/> <s:Button id="quxiaobtn" x="262" y="200" width="80" height="40" label="取消" color="#030303" fontSize="21"/> <s:TextInput id="loginusername" x="166" y="97" width="183" height="29" fontSize="22" fontWeight="bold"/> <s:TextInput id="loginpassword" x="168" y="142" width="183" height="29" displayAsPassword="true" fontSize="22" fontWeight="bold" enter="login()"/> <s:Label id="usernamelabel" x="76" y="100" width="81" height="22" color="#040404" text="用户名:"/> <s:Label id="passwordlabel" x="76" y="147" width="81" height="24" color="#020202" text="口 令:"/> </s:Panel> </s:Application>
然后在和TestDemo.mxml同级默认包下新建Index.mxml 在里面随便放入一个按钮即可,重启你的tomcat服务器,
在TestDemo.mxml源码上面点击右键选择debug模式运行该程序,如果登录成功,则会跳转到只有一个按钮“success”的页面,如果失败就会弹出提示框,我们在java代码中定义的用户名密码均为admin,下面两个截图第一个演示失败,第二个演示成功,

用123做用户,提示失败,下面是正确的用户名,会跳转到有success按钮的页面

至此,一个例子成功完成。
PS:
1、在调试的过程中,如果检查了很多遍,一个简单的代码经过修改后运行起来报错,不管怎么改都还是之前的错误界面,这个时候建议先清理一下IE缓存,然后重启 tomcat服务器,在做WEB项目的时候这个是常识,现在我们做的又多了flex,那么记得也更新一下flex,方法是在项目上右键,选择“属性”,然后选择“服务 器技术”,然后点击一下“验证设置”,然后点击“确定”,这个时候flex会整体刷新一次,我有好多问题都是因为这个导致的。
2、遇到问题冷静,要会找问题,对于编程来说,google相对要比百度好用的多,google的搜索结果更加准确一些。
3、其实java端返回的数据是JSON格式的,上述例子中尽管我只返回了一个OK,它也会被BlazeDS封装为JSON数据,当我们要返回多个值的时候可以这样写
public String message(){ String mess="{"name":"lisi","age":22}"; return mess; }
写为JSON格式的数据就可以了,在flex端有方法可以读取这些值.。