http://blog.csdn.net/assin/article/details/4277403
无论是哪种服务器端技术都能够很轻松地应用 XML,因为 XML 完全是一个基于文本的协议。像 XML 这样基于文本的协议的缺点是额外的数据抽象层的编写与维护工作相对很沉重。此外,如果数据需要序列化和反序列化,那么这个数据抽象层在客户端和服务器端都会占用很多资源。
Flash Player 可以支持另外一种传输协议,这个协议能够缓解由基于文本的协议导致的传输瓶颈问题,能够帮助开发者以更简单的方式与服务器交互。这就是 AMF(Action Message Format)。它是一个二进制格式的协议,能够替代用于传输XML的基于文本的协议而在 HTTP 协议之上交换数据。采用 AMF 的应用中,数据抽象层完全可以省去,客户与服务器间的通讯效率比传统的应用基于文本的协议传输要高得多。
BlazeDS 中包含了 AMF 的 Java 实现,可以用来与服务器端的 Java 对象远程交互,也可以用来在客户端之间传递消息。开发人员可以借助 BlazeDS 的远程技术简单地调用 POJO、Spring 服务或EJB方法。开发人员可以通过其消息系统从客户端向服务器端发送消息,当然也可从服务器端向客户端发送消息。
BlazeDS 也可以与其他一些消息系统结合使用,比如JMS、ActiveMQ。由于其远程技术与消息系统采用的方式是在 HTTP 协议上传输 AMF 数据,BlazeDS 因此在性能上拥有很大优势,同时也避免了额外的数据抽象层的处理工作。BlazeDS 在很多基于 Java 的应用服务器环境下都能正常工作,这些服务器包括 Tomcat、WebSphere、WebLogic、JBoss 以及 ColdFusion。此外,无论是 web(在 Flash Player 中运行)还是桌面(在Adobe AIR下运行)的 Flex 应用程序中,BlazeDS 的使用都很简单。
简单来说 BlazeDS是一个基于服务器的 Java 远程调用和 Web 消息传递技术,它能够让后台的 Java 应用程序和运行在浏览器上的 Flex 应用程序相互通信。BlazeDS 是 Adobe 的一个开源项目,里面提供了 Java 封装 AMF3 格式的方法。下面通过一个 HelloWorld 的例子对它做一个初步的了解。
一、所需的软件:
MyEclipse + Tomcat 6.0 + Flex Builder 3 + BlazeDS,软件的下载请直接问 goole。
二、配置服务器端(MyEclipse + Tomcat 6.0 + BlazeDS)
1. 先将 BlazeDS 压缩包解开,然后找到 blazeds.war 再用 winrar 解开。
2. 打开 MyEclipse,配置 Tomcat 服务器:Window -> Preferences -> MyEclipse -> Application Servers -> Tomcat -> Tomcat 6.x 配置 Tomcat home directory 为 Tomcat 的安装路径,同时选择 Tomcat server -> Enable。
3. 接下来,在 MyEclipse 中创建一个 Web Project,工程名 blazeds_project。
5. 在左侧视图中选中 WebRoot 右键 -> Import -> FileSystem -> 选择 BlazeDS 安装目录下的 blazeds 文件夹。选中后打勾,Finish。出现 Override 提示框,选择 Yes To All。
6. 下面在本工程的 src 目录下编写一个 Java 类(包名 blog.sina.yyy98,类名 HelloWorld):
package blog.sina.yyy98;
public class HelloWorld {
public String getHello() {
return "Hello World";
}
}
7. java 类写好了,下面要在 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="helloWorld">
<properties>
<!-- 这里要写完整路径:包名 + 类名 -->
<source>blog.sina.yyy98.HelloWorld</source>
</properties>
</destination>
</service>
8. 好了,大功告成,现在将这个项目部属到 Tomcat 中,然后启动 Tomcat。
三、创建 Flex 客户端
1. 新建一个 Flex 项目,名称为 flex_client,选择 Application server type:J2EE。
2. 这是关键的一步,Root folder 为刚刚在 Tomcat 中部署的 blazeds_project 项目路径。为了保持一致性,Root URL 和 Context root 中的相对路径的名称都与该 web 项目名称保持相同。这三项内容填写好后,需要点击 “Validate Configuration” 按钮,进行配置验证(此时最好让 Tomcat 处于开启状态)。验证完成后点击 Finish。
3. 最后编写客户端(flex_client.mxml):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
private function resultHandler(event:ResultEvent):void {
Alert.show(event.result.toString(), "成功");
}
private function faultHandler(event:FaultEvent):void {
Alert.show(event.fault.toString(), "失败");
}
]]>
</mx:Script>
<!-- destination 属性值要和 remoting-config.xml 中 destination 的 id 一致-->
<mx:RemoteObject id="remoteObject"
destination="helloWorld"
result="resultHandler(event)"
fault="faultHandler(event)"/>
<mx:Button label="发送消息" click="remoteObject.getHello()" x="256.5" y="197"/>
</mx:Application>
AS 表示法:
var remoteObject:RemoteObject = new RemoteObject();
remoteObject.destination = "helloWorld";
remoteObject.addEventListener(ResultEvent.RESULT, resultHandler);
remoteObject.addEventListener(FaultEvent.FAULT, faultHandler);
4. Ok,完成。运行 felx_client,收到服务器端返回的 “Hello World” 字符串。