何为BlazeDS?
BlazeDS 是一个基于服务器的 Java 远程控制 (remoting) 和 Web 消息传递 (messaging) 技术,它能够使得后端的 Java 应用程序和运行在浏览器上的 Adobe Flex 应用程序相互通信。
下面将从实用、操作层面讲述如何实现远程控制和消息传递。
1、关于环境的搭建
首先,整个环境至少包括服务器(如tomcat)、java环境(至少需要编译和运行环境)、flex环境(编写、编译前台程序)。可以试着整合这三者,如Eclipse+Tamcat+Flash Builder。然而本文主要讲述如何实现前后台的通信,不在如何搭建环境。
如果不能将三者整合在一起,可以采用MyEclipse+Tomcat,Flash Builder搭配。这里考虑在MyEclipse+Tomcat的环境下,可以直接将java程序部署到服务器端,当作后台程序。如果熟悉tomcat中服务的部署,完全可以手动部署后台程序。
其次,至于版本问题。可以考虑MyEcclipse 10 + Tomcat 7,Flash Builder 4(本文实验的环境),也可是MyEcclipse 8 + Tomcat 6,Flash Builder 4。
下面首先讲java后台的布置,然后是前台的开发。
2、java后台的布置
首先,下载并解构含BlazeDS的zip包。
地址:http://sourceforge.net/adobe/blazeds/wiki/Downloads(turnkey 版本已包含了 Tomcat 服务器-----建议下载此版本)
tomcat ----------------- 内置的tomcat,如果你没有tomcat的话可以使用它。里面有blazes.war的解压形式。
sampledb------------- 示例用的数据库,可以运行startdb.bat来启动数据库。
resource--------------- 引用包和配置文件。
docs-------------------- 说明文档,类似API文档。
samples.war--------- 官方提供的示例,放到tomca的webapps即可使用。
ds-console.war------ blazeDS的控制台程序。
blazeds.war----------- blazeDS的核心文件、库。
其次,编写java程序和环境的部署。
1)编写java程序。启动MyEclipse,新建java web project(例子中取为HelloBlazeDS),然后新建java class(例子中取为HelloBlazeDS)。
package cn.era.misa;
/**
* HelloBlazeDS Example
* @author: era_misa
* @project: HelloBlazeDS
* @package: cn.era.misa
*/
public class HelloBlazeDS {
public HelloBlazeDS() {
}
public String welcome(String name) {
return name + ", welcome to the BlazeDS world !";
}
}
welcome函数为HelloBlazeDS类的对外接口,可接受参数,并返回相应值。
2)后台环境部署。这一步可以手动部署,当然通过MyEclipse完成自动部署。- 向web project下的WebRoot\WEB-INF\lib目录下添加jar包。这些类可以在刚才Blaze的zip解压文件夹下\tomcat\webapps\blazeds\WEB-INF\lib的所有jar包。亦可将整个lib文件夹覆盖web project中WebRoot\WEB-INF\lib文件夹。
- 同样将\tomcat\webapps\blazeds\WEB-INF\flex文件夹粘贴到web project中WebRoot\WEB-INF\目录下。
- 最后将\tomcat\webapps\blazeds\WEB-INF\web.xml文件覆盖web project中WebRoot\WEB-INF\目录下的web.xml。
- 修改配置文件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="helloBlazeDSdest"> <!--- id 可以任意指定 -->
<properties>
<source>cn.era.misa.HelloBlazeDS</source> <!--- source 指定包名、类名 -->
</properties>
</destination>
</service>
<?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>
<mx:RemoteObject
<!--id 自己指定,destination 须与remoting-config.xml中的destination id 一致 -->
id="helloRemoteObject"
destination="helloBlazeDSdest"
fault="faultHandler(event)"
result="resultHandler(event)"
showBusyCursor="true"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.controls.Alert; import mx.rpc.AsyncToken;
import mx.rpc.events.ResultEvent;
private function faultHandler(event: Event): void {
Alert.show(event.toString(), event.type);
}
private function resultHandler(event: ResultEvent): void {
//event.result是服务器端返回对象
result.text = "Message:" + event.result.toString();
}
private function sendHandler(): void {
//welcome为HelloBlazeDS类的公有方法
helloRemoteObject.welcome(userName.text);
}
]]>
</fx:Script>
<s:Panel x="10" y="10" width="272" height="148" layout="absolute" title="BlazeDS Remote HelloWorld Sample">
<s:Label x="10" y="22" text="请输入姓名:"/>
<s:TextInput x="70" y="19" id="userName"/>
<s:Button x="184" y="45" label="发送" click="sendHandler()"/>
<s:Text x="10" y="79" id="result"/> </s:Panel>
</s:Application>