`
minner
  • 浏览: 54034 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
文章分类
社区版块
存档分类
最新评论

利用BlazeDS实现Java和ActionScript3通信(AsWing和remoting服务)

阅读更多
OK,在解决了一个本人百思不得其解的问题后,开始下一步工作,让我们开始使用BlazeDS。

本次任务目的,AsWing程序向服务器发送信息,服务器返回这个信息,并在AsWing界面上显示出来。

1.Aswing我就不多说了,以前说过一些,具体的可以到官网去看,况且这里也不是复杂运用。而且AsWing网站有专门的介绍BlazeDS通信的文章,我的程序也是从那里学来的。用AsWing画一个界面。

2.编写服务端Java代码。

<>

public class SayHello {

    import java.uti.Array;
    public Array getId(String[] arr) 

    {
        return arr;
    }

}

哈哈,很简单吧,意思就是,flash传给我们什么,我们就返回什么。ok,编译java文件成class文件,接下来我们只需要class文件了。

3.BlazeDS为我们提供了Tomcat应用框架的模板,我们只需要拷贝一份blazeds_turnkey_3-0-0-544\tomcat\webapps下的blazeds文件夹,把它命名为自己想要的应用的名字就可以了,但是我们粘帖的新的应用的文件夹同样要在webapps文件夹下,具体原因以前说过。

4.这里我们重命名的文件夹名字为“aswingtestshow”,记住这个名字,因为以后我们会用到。接下来把我们编译好的class文件放到aswingtestshow\WEB-INF\classes文件夹下。

5.重要的一布,我们开始编写配置文件了。上文提到,我们用的是remoting服务,那自然是到 blazeds_turnkey_3-0-0-544\tomcat\webapps\aswingtestshow\WEB-INF\flex文件夹下找到相应的配置文件remoting-config.xml,打开编辑它吧。以下是整个文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

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

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
<destination id="sayHello">
     <properties>
      <source>SayHello</source>
      </properties>
     </destination>


</service>

带下滑线的部分是我添加的,其余的是系统默认的,具体解释一下,destination标签代表了一个远程调用,对应Java文件的一个类,id属性代表的是AS调用时使用的标识,source标签意味着我们在class文件夹下的Java的类文件的类名,如果有包名,按Java的正常调用方式,添加上去。注意,这里我们还没有使用java类中的函数名。如果你没有多余的更改的话,我想现在服务器端的配置已经完成了。你可以利用浏览器查看一下,http://{server.name}:{server.port}/{context.root}/messagebroker/amf,server.name-你的机器ip或机器名,server.port-服务端口,context.root-网络应用名。

在我写这篇blog之前,我一直觉得上面的地址是一个很神奇的字符串,因为我不知道他是哪里来的,知道今天我发现了,他来自flex文件夹下的services-config.xml文件,

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
           <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
       </channel-definition>

还记得remoting-config.xml文件中默认的一段描述吗?

<default-channels>
        <channel ref="my-amf"/>
    </default-channels>

看看两个channel的描述,ok,我想大家如果想更改的话知道如何更改了。

这个地址http://{server.name}:{server.port}/{context.root}/messagebroker/amf,转化成我现在的实际的地址应该是:http://localhost:8400/aswingtestshow/messagebroker/amf.

用浏览器查看这个网址,如果空吧,那证明你成功了,如果是页面未找到404,那很遗憾,可能我们在哪里出错了。

4.我们终于可以用flash来调用java了。

AS代码如下:

package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.net.NetConnection;
    import flash.net.ObjectEncoding;
    import flash.net.Responder;
    import org.aswing.AsWingManager;
    import org.aswing.BorderLayout;
    import org.aswing.JButton;
    import org.aswing.JFrame;
    import org.aswing.JTextArea;
    import org.aswing.JTextField;

    public class AswingTest extends Sprite
    {
        //用户输入框
        private var txt:JTextField = new JTextField();
        //程序主框架
        private var window:JFrame = new JFrame(this);
        //链接
        private var nc : NetConnection = new NetConnection(); 
        //要发送的数组
        private var arr:Array = new Array(); 
        //显示接受的数据
        private var txtA:JTextArea = new JTextArea();
        //回应
           private var responder : Responder = null;
        //服务连接字符串
           private const amf3URL : String = "http://127.0.0.1:8400/aswingtest/messagebroker/amf";

        public function AswingTest()
        {
            AsWingManager.initAsStandard(this);
            //配置主框架信息
            window.setSizeWH(400,300);
            window.setTitle("BlazeDS通信");
            //配置按钮信息
            var btn:JButton = new JButton("Hello")
            btn.addEventListener(MouseEvent.CLICK,btnClicked);
            //配置用户输入框信息
            txt.setMinimumWidth(100);
            //配置返回的信息显示框信息
            txtA.setMinimumHeight(200);
            txtA.setMinimumWidth(200);
            txtA.setWordWrap(true);
            //向容器中添加显示元素
            window.getContentPane().setLayout(new BorderLayout());
            window.getContentPane().append(btn,BorderLayout.SOUTH);
            window.getContentPane().append(txt,BorderLayout.NORTH);
            window.getContentPane().append(txtA,BorderLayout.CENTER);
            //显示到舞台
            window.show();
            //配置链接信息
            responder = new Responder(resulet,error);
            nc.objectEncoding = ObjectEncoding.AMF3; 
            nc.connect(amf3URL); 
        }
        /**
         * 点击按钮时向服务器发送数据
         *
        */
        private function btnClicked(e:MouseEvent):void {
              arr.push(txt.getText());
              nc.call("sayHello.getId", responder,arr);
            txt.setText("");
        }
        /**
         * 成功接受到返回的数据时的现实信息
         */
        private function resulet(e:Object):void {
            //取得返回数据并转换为Array对像
            var getarr:Array = e as Array;
            var showstr:String = "";
            //格式化为String
            for(var i:int = 0; i < getarr.length; i++) {
                showstr += getarr[i] + "\n";
            }
            //在文本框中显示
            txtA.setText(showstr);
        }
        /**
         * 调用服务出错时的处理函数
         */
        private function error(e:Object):void {
            txt.setText(e.toString());
        }
    }
}

值得解释的private var nc : NetConnection = new NetConnection();  定义一个远程服务对象,作用是,联系远程java类,并执行某些操作。

  nc.objectEncoding = ObjectEncoding.AMF3;  
  nc.connect(amf3URL);
  设置远程连接数据传输类型,并设置远程连接字符串,private const amf3URL : String = "http://127.0.0.1:8400/aswingtestshow/messagebroker/amf";还记得这个字符串吧?在哪个什么配置文件里来的。

然后我们最期望的事情发生了

nc.call("sayHello.getId", responder,arr);

“sayHello”记得配置文件里那个id吗?
<destination id="sayHello">
     <properties>
              <source>SayHello</source>
      </properties>
</destination>
注意,是id中的首字母小写的id。
那是getId又是什么呢?是java的SayHello这个类中的那个函数,
public Array getId(String[] arr) 

    {
        return arr;
    }

responder呢,是一个回调类,也就是我们调用远程的getId这个方法,并且远程方法返回信息给我们的时候,我们会调用到 responder。它的基本构成是两个函数,一个是成功返回要调用的函数,一个是失败返回要调用的函数,在这里分别是,responder = new Responder(resulet,error);

我们可能都希望调用成功吧,那我们看看调用成功后是怎么处理的,

         /**
         * 成功接受到返回的数据时的现实信息
         */
        private function resulet(e:Object):void {
            //取得返回数据并转换为Array对像
            var getarr:Array = e as Array;
            var showstr:String = "";
            //格式化为String
            for(var i:int = 0; i < getarr.length; i++) {
                showstr += getarr[i] + "\n";
            }
            //在文本框中显示
            txtA.setText(showstr);
        }

java返回给了我们的是Array类型的数据,as中和Array类型对应。但是我们需要转化,至于更多类型的对应关系,大家可以上网查。
我们只需要一句话把我们想要的数组获得

var getarr:Array = e as Array;

接下来去用我们的数据就好了。
分享到:
评论

相关推荐

    最简单的BlazeDS实现flex与java通信.rtf

    最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的...

    使用BlazeDS实现Java和Flex通信

    BlazeDS 是一款由Adobe开发的开源服务器端技术,它主要功能是实现Java应用程序与运行在浏览器中的Adobe Flex应用之间的远程控制(Remoting)和Web消息传递(Messaging)。通过BlazeDS,开发者能够轻松地创建富互联网...

    51CTO下载-使用BlazeDS实现Java和Flex通信(PDF+源码

    本文将深入探讨如何使用BlazeDS来实现Java和Flex之间的通信,以及这个过程中涉及的关键技术和实践步骤。 1. **BlazeDS概述** BlazeDS是基于AMF(Action Message Format)协议的轻量级中间件,它可以提供实时的、低...

    用BlazeDS实现Java和Flex通信

    ### 使用BlazeDS实现Java与Flex通信的关键知识点 #### 一、引言 随着Web技术的发展,前后端的通信方式也变得越来越多样化。其中,Flex作为一种流行的应用开发框架,经常被用于构建丰富的互联网应用程序(RIA)。...

    使用BlazeDS实现Java和Flex通信之hello world

    这个“使用BlazeDS实现Java和Flex通信之hello world”示例旨在介绍如何通过BlazeDS来实现简单但关键的客户端-服务器交互。下面我们将详细探讨BlazeDS、Flex以及它们之间的通信机制,并通过“hello world”实例来具体...

    Blazeds与java通信

    它提供了一组服务,包括Remoting、MessageBroker和LiveCycle Data Services(LCDS),用于在Flex客户端和Java服务器之间进行双向通信。Blazeds通过AMF(Action Message Format)协议实现了高效的数据传输。 2. **...

    blazeds与java(spring)通信配置说明

    BlazeDS 与 Java(Spring)通信配置是一个关键的步骤,它允许 Flex 客户端应用与后端的 Java 服务进行数据交换。BlazeDS 是 Adobe 推出的一个开源项目,提供了轻量级的消息代理服务,使得 Flex 和 Java 之间可以使用...

    BlazeDS实现flex与java通信

    在Flex客户端,我们可以利用 BlazeDS 提供的Service组件来与Java后端通信,如 RemoteObject、HTTPService 和 WebService,它们分别对应于Remoting、HTTP请求和SOAP服务。 7. **Java后端接口设计** Java后端需要...

    基于Blazeds的flex和java双向通信

    Blazeds是Adobe提供的一种解决方案,它使得Flex和Java之间能够实现高效、实时的双向通信。本篇文章将深入探讨Blazeds在Flex和Java之间的通信机制及其应用。 1. **Blazeds简介** Blazeds是Adobe官方的Flex和Java...

    Flex与java通过BlazeDS实现通信

    BlazeDS是Adobe提供的一款开源中间件,它允许Flex客户端与Java后端进行实时双向通信,支持AMF(Action Message Format)数据交换,提供了高效的数据传输和Remoting服务。 1. **BlazeDS简介** BlazeDS是Flex和Java...

    利用BlazeDS实现Flex和JAVA通讯,内含与spring整合

    BlazeDS是Adobe提供的一个开源项目,主要功能是作为Java和Flex应用程序之间的通信桥梁,提供远程控制(Remoting)和Web消息传递(Messaging)服务。BlazeDS允许Flex客户端与Java后端进行实时数据交互,使得富互联网...

    blazeds下载,java和flex的通信工具

    Blazeds使得开发人员能够利用Java后端服务与Flex前端应用程序进行实时的双向通信,实现富互联网应用(RIA)的功能。 在Flex应用中,通常会使用ActionScript作为客户端编程语言,而BlazDS则提供了与Java服务器端进行...

    Flex+BlazeDS+java通信详细笔记和源代码

    总结来说,Flex+BlazeDS+Java通信的核心在于BlazeDS作为桥梁,使得Flex的前端可以便捷地调用Java后端的服务,实现数据的双向传输,从而创建出具有实时交互特性的ria应用。而`PushTest6`的源代码则可以作为学习和理解...

    BlazeDS实现java后台消息推送flex前台接收的例子

    BlazeDS是一个开源的服务器端技术,主要用于在Java应用程序和Adobe Flex前端之间提供实时的数据通信。这个技术允许双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这种功能对于实时性...

    Flex + BlazeDS + Java + JMS 通信实例(附源码)

    本实例重点探讨了如何使用Flex作为前端,通过BlazeDS与Java后台结合JMS服务进行通信,实现数据的实时推送,从而达到页面实时刷新的效果。下面将详细介绍这一技术栈中的关键知识点: 1. **Flex**:Flex是基于...

Global site tag (gtag.js) - Google Analytics