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通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的...
BlazeDS 是一款由Adobe开发的开源服务器端技术,它主要功能是实现Java应用程序与运行在浏览器中的Adobe Flex应用之间的远程控制(Remoting)和Web消息传递(Messaging)。通过BlazeDS,开发者能够轻松地创建富互联网...
本文将深入探讨如何使用BlazeDS来实现Java和Flex之间的通信,以及这个过程中涉及的关键技术和实践步骤。 1. **BlazeDS概述** BlazeDS是基于AMF(Action Message Format)协议的轻量级中间件,它可以提供实时的、低...
### 使用BlazeDS实现Java与Flex通信的关键知识点 #### 一、引言 随着Web技术的发展,前后端的通信方式也变得越来越多样化。其中,Flex作为一种流行的应用开发框架,经常被用于构建丰富的互联网应用程序(RIA)。...
这个“使用BlazeDS实现Java和Flex通信之hello world”示例旨在介绍如何通过BlazeDS来实现简单但关键的客户端-服务器交互。下面我们将详细探讨BlazeDS、Flex以及它们之间的通信机制,并通过“hello world”实例来具体...
它提供了一组服务,包括Remoting、MessageBroker和LiveCycle Data Services(LCDS),用于在Flex客户端和Java服务器之间进行双向通信。Blazeds通过AMF(Action Message Format)协议实现了高效的数据传输。 2. **...
BlazeDS 与 Java(Spring)通信配置是一个关键的步骤,它允许 Flex 客户端应用与后端的 Java 服务进行数据交换。BlazeDS 是 Adobe 推出的一个开源项目,提供了轻量级的消息代理服务,使得 Flex 和 Java 之间可以使用...
在Flex客户端,我们可以利用 BlazeDS 提供的Service组件来与Java后端通信,如 RemoteObject、HTTPService 和 WebService,它们分别对应于Remoting、HTTP请求和SOAP服务。 7. **Java后端接口设计** Java后端需要...
Blazeds是Adobe提供的一种解决方案,它使得Flex和Java之间能够实现高效、实时的双向通信。本篇文章将深入探讨Blazeds在Flex和Java之间的通信机制及其应用。 1. **Blazeds简介** Blazeds是Adobe官方的Flex和Java...
BlazeDS是Adobe提供的一款开源中间件,它允许Flex客户端与Java后端进行实时双向通信,支持AMF(Action Message Format)数据交换,提供了高效的数据传输和Remoting服务。 1. **BlazeDS简介** BlazeDS是Flex和Java...
BlazeDS是Adobe提供的一个开源项目,主要功能是作为Java和Flex应用程序之间的通信桥梁,提供远程控制(Remoting)和Web消息传递(Messaging)服务。BlazeDS允许Flex客户端与Java后端进行实时数据交互,使得富互联网...
Blazeds使得开发人员能够利用Java后端服务与Flex前端应用程序进行实时的双向通信,实现富互联网应用(RIA)的功能。 在Flex应用中,通常会使用ActionScript作为客户端编程语言,而BlazDS则提供了与Java服务器端进行...
总结来说,Flex+BlazeDS+Java通信的核心在于BlazeDS作为桥梁,使得Flex的前端可以便捷地调用Java后端的服务,实现数据的双向传输,从而创建出具有实时交互特性的ria应用。而`PushTest6`的源代码则可以作为学习和理解...
BlazeDS是一个开源的服务器端技术,主要用于在Java应用程序和Adobe Flex前端之间提供实时的数据通信。这个技术允许双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这种功能对于实时性...
本实例重点探讨了如何使用Flex作为前端,通过BlazeDS与Java后台结合JMS服务进行通信,实现数据的实时推送,从而达到页面实时刷新的效果。下面将详细介绍这一技术栈中的关键知识点: 1. **Flex**:Flex是基于...