You are on page 1of 8

使用 BlazeDS 实现 Java 和 Flex 通信

作者:
作者:Liceven,
Liceven,博客:
博客:http://yexin218.cublog.cn
Liceven,博客: http://yexin218.cublog.cn 日期:
日期:2008-6-3
2008-6-3

转载请注明来源。谢谢合作
转载请注明来源。谢谢合作。

BlazeDS 是一个基于服务器的 Java 远程控制(remoting)和


Web 消息传递(messaging)技术,它能够使得后端的 Java 应用
程序和运行在浏览器上的 Adobe Flex 应用程序相互通信。这
篇文章中,我讲述一种方法(也许不是最好的)使得我能够
成功地利用 BlazeDS 和 Flex 建立一个简单的程序。使用的
IDE 是 eclipse,而并非 Flex Builder.下面我将逐步介绍怎么实
现这个简单的程序。
1. 安装 JDK 和 Tomcat,并且实现成功配置。详细请见:
http://blog.chinaunix.net/u/21684/showart_195064.html
2. 安 装 Flex SDK. 详 细 请 见 官 方 文 档 :
http://www.adobe.com/devnet/flex/?navID=gettingstarted
3. 下 载 BlazeDS , 下 载 地 址 和 安 装 方 法 请 参 考 :
http://opensource.adobe.com/wiki/display/blazeds/Release+
Builds 。如果你使用的是 turnkey 版本(建议下载此版本 )
里面实际上包含了 Tomcat 服务器了。但是本人因为之前
已经装好了 Tomcat6.0.16 了,所以我的安装的是自己手动
的了。如果你使用的是整合 Tomcat 版本的 BlazeDS,那么
请 参 考
http://opensource.adobe.com/wiki/display/blazeds/Installatio
n+Guide 。下面我介绍只安装 BlazeDS 的 web application
版本(但是仍然下载的是 Turnkey 版本)。下载的 zip 包里
面包含了: blazeds.war: 主要的 BlazeDS war 文件,用来
建立你的 BlazeDS 应用程序。Sample.war 就是 BlazeDS
例子了。Ds-console.war,简单的 BlazeDS 部署管理程序。
每一个 war 程序都是独立的,假如你使用 J2EE 的 web 应
用程序选项,那么你必须有一个 J2EE 应用服务器或者
servlet 容器。比如使用 Tomcat.而且必须把刚才的三个 war
文件部署在 Tomcat_Home(tomcat 安装目录)下的 webapps
目录 下 。 然 后 重 启 Tomcat 服务 器 , 在 浏 览 器 输 入 :
http://localhost:8080/samples 如果看到显示页面代表就成
功了。如果你的应用程序需要使用 HSWLDB 数据库,那
么也拷贝.zip 文件中的 sampledb 目录到 webapps 目 录 下 ,
然后启动数据库。启动方法很简单:到 sampledb 目录下,
执行 startdb.bat 就可了(windows OS)。提示:可以的话,
在你的 Eclipse 目录下,找到 eclipse.ini 把最大内存数改成
512.
4. ( 可 选 ) 配 置 Tomcat 的 用 户 角 色 。 即 在
Tomcat_Home/conf/tomat-users.xml 添 加 以 下 语 句 :
<role rolename="manager"/><user username="abhi" password="abhi"
roles="manager"/>

5. 利 用 Eclipse 建 立 Flex Project 。 工 程 名 字 叫 做


BlazeApp.
Application Type 选择 web application, 服务器选择 J2EE.
关联 WTP,至于代码文件保存目录自定义。Next。
6. 设置 J2EE 服务器。我们选择 Tomcat,可能需要手动配置
(new)。然后选择 flex war 文件,即我们放在 webapps 目录
下 的
blazeds.war.

然后 next.
7. 接 着 , 默 认 设 置 , 也 可 自 定 义 。
接着 next.其实到这里已经完成了 project 建立。
8. 接下来你可以在 eclipse 中可以看到整个工程的所有文件
以及配置。在开发之前,可能需要修改 context root 配置。
点击 BlazeApp 右键,选择属性,然后见到如图,修改 context
root 值为 BlazeApp.(默认的是 WebContent,好像不更改也
可以。自行测试…)。
9. 创建 Java 文件。点击 src 文件夹,然后创建 java class. 类
的包为 hello,名字为 HelloWorld.
package hello;
public class HelloWorld {
public String sayHelloTo(String str) {
System.out.println("Hello " + str);
return "Hello " + str; }
}

10.在 BlazeApp.mxml 文件中新建一个 text 和一个按钮,来显


示从 HelloWorld 传回来的信息。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[ import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
[Bindable]
private var helloResult:String;
private function sayHelloTo():void {
ro.sayHelloTo(inputText.text);
}
private function resultHandler(event:ResultEvent):void {
helloResult = event.result as String;
} ]]> </mx:Script>
<mx:RemoteObject id="ro" destination="helloworld"
result="resultHandler(event)" />
<mx:HBox width="100%">
<mx:TextInput id="inputText"/>
<mx:Button label="Submit" click="sayHelloTo()"/>
</mx:HBox>
<mx:Label text="{helloResult}"/>
</mx:Application>

11. 现在,我们要定义 remote object 来是的你的 flex 程序能够调用 java

类。首先来配置/WEB-INF/flex/remoting-config.xml 文件,添加以

下粗体部分来新增一个 destionation—HelloWorld 类。
<?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>hello.HelloWorld</source>
</properties>
</destination>
</service>

12. 到此,配置结束。然后选择 BlazeApp 项目,选择在服务器上执行 。

即浏览地址为:http://localhost:8080/BlazedApp/BlazedApp.html 如

果你能在输入框输入字段之后,点击按钮能返回 Hello,XXX 的信

息 , 就 代 表 成 功 了 。 如 图 :
(我使用的例子的工程名字叫做 DSTest 除此之外操作相同,另外

附录中的程序也是使用 DSTest。请自行参考。)

13. 参考文献:http://blog.baao.com/blojsom/blog/yac/BlazeDS/BlazeDS-

avec-Flex-builder-3-Tomcat-6-et-les-webtools?smm=y 以 及

http://java-x.blogspot.com/2008/03/blazeds-for-java-flex-

communication.html#sampleCode