Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29961684
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: 系统运维

2008-05-30 10:20:09

上一次,我讲了如何新建一个包含Blazeds组件的工程,这一次我们讲如何如何使用Flex的远程对象调用服务端方法。在这里,大家要明确一点,那就是虽然Blazeds是用JAVA开发的,但是这并不意味着我们只能与JAVA端通信。事实上,我们还可以使我们的FLEX端与采用,, ,等语言编写的服务端通信,不过这可不是我今天的重点。

        Flex的Remoting采用AMF通信协议(Flex3已经升级为了AMF2了),这种协议最大的一个优势就是由于采用了二进制的传输方式,其传输效率非常高,可以让我们在复杂的网络环境获得良好的性能。根据国外一个很牛的老外写的在线测试工具,AMF协议的效率要远远高于webservice以及采用JSON格式承载数据的AJAX方式。 Flex的另一种方式通信就是PollingChannel,它的特点就是它可以多批次的去服务端取数据,而不是长时间保持连接直到所有数据取回之后才关闭我们宝贵的HTTP连接。

       首先我们在WEB-INF下面的Class目录中添加一个JAVA类,如下:

     public class HelloWorld {
         private userSaid;
        public repeat( said) {
            this.userSaid = "Reply from server: " + said;
            return this.userSaid;
        }
        public sayHello() {
        now = new ();
        return "Hello World " + now;
     }
  }

        然后我们打开Remoting-Config.xml文件,在service中添加一个目的地指向我们服务端的JAVA类(destination节点),具体如下:

        id="remoting-service" class="flex.messaging.services.RemotingService">
        >

        id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true">>
       >

     
id="Hello">
       >

         >
HelloWorld>

       >

      >

    >
        ref="my-amf">
    >

>
>

       添加完成之后,我们打开一个flex页面,在上面添加一个RemotObject标签,当然你也可以在可视化状态下拖一个上去,然后添加我们刚才在HelloWorl类中定义的两个方法,并在AS代码块中定义两个回调方法用来异步接收返回的结果或发生的异常,具体代码如下:

       "" layout="absolute" backgroundcolor="#FFFFFF" viewsourceurl="srcview/index.html">
    "myservice"
fault="faultHandler(event)" showbusycursor="true" destination="Hello">
        name
="sayHello" result="resultHandler(event)">
        name
="repeat" result="resultHandler(event)">
   
 
   
        [CDATA[
            import mx.managers.CursorManager;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;
            private function faultHandler(fault:FaultEvent):void
            {
                CursorManager.removeBusyCursor();
                result_text.text = "code:n" + fault.fault.faultCode + "nnMessage:n" + fault.fault.faultString + "nnDetail:n" + fault.fault.faultDetail;
            }
 
            private function resultHandler(evt:ResultEvent):void
            {
                result_text.text = evt.message.body.toString(); // same as: evt.result.toString();
            }
        ]]–>
   

 
    button x="250" y="157" label="sayHello" width="79" click="myservice.getOperation(’sayHello’).send();">
    button x="250" y="187" label="Repeat" click="myservice.getOperation(’repeat’).send(myText.text); ">
    "10" y="36" width="319" height="113" id="result_text">
    "10" y="10" text="Result:">
    "82" y="187" id="myText" text="Sent to Server">

     做好之后,激动人心的时刻来临了, F11运行,现在你就可以尽情的与服务端发消息了。注意,JAVA类的序列化与反序列化对我们来说都是透明的,这一切都是FLEX与Blazeds为我们做的。这就是它们带给我们的好处,让我们将重点放在业务逻辑与用户更好的操作性与体验上。

阅读(1303) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~