一種方法:使用BlazeDS實現Java和Flex通信
BlazeDS 是一個基于服務器的 Java 遠程控制 (remoting) 和 Web 消息傳遞 (messaging)
技術,它能夠使得后端的 Java 應用程序和運行在瀏覽器上的 Adobe Flex
應用程序相互通信。這篇文章中,我講述一種方法(也許不是最好的)使得我能夠成功地利用 BlazeDS 和 Flex 建立一個簡單的程序。使用的
IDE 是 eclipse, 而并非 Flex Builder. 下面我將逐步介紹怎么實現這個簡單的程序。
1. 安裝 JDK 和 Tomcat, 并且實現成功配置。
2. 安裝 Flex SDK. 詳細請見官方文檔
3. 下載 BlazeDS , 如果你使用的是 turnkey 版本(建議下載此版本)里面實際上包含了 Tomcat 服務器了。
下面介紹只安裝 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
添加以下語句:
Java代碼
<role rolename= "manager" /><user username= "abhi"
password= "abhi" roles= "manager" />
<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.
Java代碼
package hello;
public class HelloWorld {
public String sayHelloTo(String str) {
System.out.println( "Hello " + str);
return "Hello " + str; }
}
package hello; public class HelloWorld {public String
sayHelloTo(String str) {System.out.println("Hello " + str); return
"Hello " + str; } }
10. 在 BlazeApp.mxml 文件中新建一個 text 和一個按鈕,來顯示從 HelloWorld 傳回來的信息。
Xml代碼
<? xml version = "1.0" encoding = "utf-8" ?>
< mx:Application xmlns:mx = "
< 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 >
<?xml version="1.0" encoding="utf-8"?> <mx:Application
xmlns:mx="
11. 定義 remote object 使你的 flex 程序能夠調用 java 類。
首先來配置 /WEB-INF/flex/remoting-config.xml
文件,添加以下粗體部分來新增一個destionation—HelloWorld 類。
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 >
< STRONG > < destination id = "helloworld" >
< properties >
< source > hello.HelloWorld </ source >
</ properties >
</ destination > </ STRONG >
</ service >
12. 配置結束。
然后選擇 BlazeApp 項目,選擇在服務器上執行。即瀏覽地址為: http://localhost:8080/BlazedApp/BlazedApp.html
如果你能在輸入框輸入字段之后,點擊按鈕能返回 Hello,XXX 的信息,就代表成功了。
如圖:
