Flex + LCDS + Java 入門教程

轉至 http://www.riachina.com/showtopic-8723.html

原文只給了這個教程的doc文檔下載地址。

我重新編輯並上傳了截圖以方便在頁面上查看。

 

一.引

很多人在帖子和羣中問到過一些關於建立Flex+LCDS(FDS)工程的問題,由於操作上的東西,很難簡單說清楚,於是寫了一個簡單的教程(本來很早就答應過的,結果被newfish逮住做東西,加上公司的事,一直抽不出時間哈,現在想換換頭腦,偷樂一下懶哈,各位別跟 newfish大大說),幫助大家入門,其實這些東西都是在LCDS的sample中包含了的(當然,sample只是包含源碼)。       本教程通過圖文介紹和對一些關鍵性的地方進行解釋,讓大家瞭解如何新建Flex的LCDS工程,並利用工具快速整合和部署J2EE項目和LCDS項目,掌握了簡單的請求RemoteObject和配置的方法,初步掌握LCDS的應用之一。

 

 

二.介紹

1.    Flex是什麼?

................

 

2.    LCDS是什麼?

LCDS(LiveCycle Data Service)之前叫做FDS(Flex Data Service),他是基於java(也有ColdFusion版的)後端的數據服務工程,功能包括映射Java對象到Flex對象(包括調用Java類的方法)、RTMP(Real Time Message Protocol)、代理、服務端生成PDF等等功能,詳細請參考LCDS裏的說明。官方有下載,需要註冊會員(免費)。

LCDS實際是付費的,但是免費也能使用,似乎是少了多CPU的支持。當然還有一些其他的數據服務,比如AMFPHP之類的。

當然,LCDS提供的功能我們都能自己實現,並非Flex脫離了LCDS就不能和後臺打交道了,除了RemoteObject還有WebSerivce、HTTPService等等。只是說,LCDS提供了更多的方便和特性。

 

3.    Java是什麼?

......

 

 

三.準備

1.    下載開發環境:

Eclipse 3.3 + FlexBuilder3 beta2 插件版 +MyEclipse 6.0 +Lcds + Tomcat 5和以上(官方都有下載,或者google裏搜一搜哈)

MyEclipse:做Java開發都應該知道MyEclipse是比較好的J2EE項目的開發及部署工具的,我們主要用它來部署Flex和Java結合的項目。6.0是適合Eclipse3.3版的。他自帶了一個Tomcat服務器

FB3:相比FB2,他在LCDS工程上做了很大的改進,特別是beta2,項目嚮導更加的易懂,而且比FB2更好的是,Flex.war是被打包在你的Flex項目中的,而不需要單獨的部署了。性能上也高出FB2

LCDS:安裝lcds後,起作用的是裏面的flex.war文件,實際上,這就是一個j2ee的工程。在發佈到web應用服務器後(比如tomcat、j4run等)就會被解壓成一個工程。當然,在FB3裏,這個發佈的過程會更加的簡單。

 

2.    安裝:

        略

 

 

...page...

四.入門教程

 

1.    新建FlexLCDS工程

 File -> new -> Flex Project ...

 注:以下設置絕大多數都可以在項目屬性中可以修改。

 

1).   嚮導界面1

 

說明:Java source folder就是你自己java業務源碼存放的根目錄,在FB3裏,LCDS項目旨在將Java J2ee項目和FlexLcds項目混合。

當然如果你不選擇 combined 兩個在一起,那麼就麻煩些:要麼你再單獨新建一個Flex項目,而這個項目只寫java代碼。要麼再建一個J2ee工程寫java代碼,而這個項目只寫 Flex代碼,但最後要把Java編譯後的class文件放到這個項目下的webroot\web-inf\classes目錄中。即不管怎樣,最後發佈時,java編譯後的class文件必須和lcds部署的項目在一起。(聽起來繞昏頭了?那就在一個工程裏吧)

 

2).   嚮導界面2



說明:Target runtime實際上沒什麼用(後來我刪除了配置文件裏的對應信息,也沒問題),但是不指定就不能繼續,如果這裏顯示的是<none>那麼就新建一個Tomcat的runtime,簡單的只需要指定tomcat的安裝目錄即可。

Content folder實際上就是最終編譯後的容器目錄,因此,Lcds的flex.war文件將會發布到 該目錄下的web-inf下的flex目錄中。同時因爲教程採用的是MyEclipse,他默認的就是發佈WebRoot裏的內容,爲了自動化,因此這裏改爲了 WebRoot(這也是java開發的習慣)

Flex WAR file 指的是安裝了lcds後的flex.war文件的路徑

Compilation options指定了flex文件的編譯方式,選擇推薦的在FlexBuilder裏編譯吧,雖然開發時多耗點時間,但是在發佈後不會佔用服務器的編譯處理時間,對用戶來說是有好處的。

Output folder 指的是Flex編譯後的swf和html等文件存放的路徑,這裏改爲了WebRoot\bin

 

3).   嚮導界面3



說明:Main source folder 是flex的源碼存放根目錄,當然和java源碼分開了。

Output folder URL 是在開發過程中運行和調試的請求路徑,這個與發佈無關,不會影響任何你在程序中使用的路徑,但是能使開發方便

注意:FlexBuilder3這裏存在bug,新建工程時,部分自定義的屬性並沒有保存下來,而必須在新建後的項目屬性中更改,後面有說明到

放心這些設置都可以在以後修改。

 

4).   新建完成的項目結構看起來是這樣的

2.    用MyEclipse添加Web容器

              之前說到了,MyEclipse是很好用的J2EE的開發插件,其中就包含了部署功能。我們可以拋開煩瑣的手動部署,交由MyEclipse完成吧,當然,首先得讓你的FlexLCDS工程變成爲J2EE的Web工程。

 

             

 

              1).   嚮導界面1

             


注意:不要點快了,把這裏的Create web.xml取消,這樣就不會覆蓋LCDS創建的web.xml文件

              現在我們的工程的圖標變成了J2EE Web 工程了,這意味着,你可以用MyEclipse來發布它或者添加更多容器,比如hibernate、spring等

             

 

3.      部署FlexLCDS工程

有了MyEclipse,那麼你就不用手動的部署你的項目了,可以簡單的通過

點擊工具欄上的這個圖標

 

1).   部署嚮導1

 

注意:(如果你的列表中沒有服務器,那麼就自己建一個)

 

2).   新建部署Web應用服務器

 

注意:如果是MyEclipse6.0,則會自帶一個Tomcat服務器。如果不是6.0,那麼點Edit server connectors...自己添加一個tomcat。

點finish後則會開始部署。成功後會在Deployment status裏提示success,並且看到列表中你的項目已經成功部署

 

4.      修改一下項目的訪問路徑

打開項目的屬性,在這裏,我們可以重新修改項目編譯和發佈的配置,包括先前嚮導裏的設置


       修改output folder url

 

 

爲什麼要這麼做?

這樣每次發佈都會自動將編譯的最終swf文件直接發佈至WebRoot\bin目錄下,而下面的output folder url則會在我們啓動和調試項目時,直接請求這個路徑(這跟發佈無關,只是我們在開發過程中會方便些)

 

5.      修改Flex Server的項目容器屬性(非常重要,多數連接路徑錯誤就是這裏配置錯誤)

 

改成如下配置

 

說明:

Root url 當然就是你的web服務器的根路徑了,Tomcat默認是8080端口,如果改了就自己修改

Context root 就是LCDS工程的名稱(注意:如果你分開爲兩個工程,則這裏指的是你J2ee項目的名稱,而不是你Flex項目的名稱,因爲你在請求Java的數據服務),在Flex請求LCDS時,會採用這個作爲參數

http://{server.name}:{server.port}/{context.root}/messagebroker/amf

如果Context root錯了,那麼永遠不可能正確的請求LCDS的服務了。

確定後,我們來運行測試一下這個FlexLCDS項目是否能正常訪問

 

6.      啓動服務器

稍等片刻,等到服務器完全啓動後繼續下面的操作

7.      運行訪問

 

注:如果之前的Output folder url配置正確,那麼會自動的彈出訪問頁面,DEBUG時也是一樣。

 

 

OK,一切順利,至此,你已經做到了第一步,即,將Flex項目、LCDS服務成功的整合至J2EE web 項目,這樣的好處就是今後發佈省的麻煩了。

 

 

...page...

五.簡單的RemoteObject

1.    什麼是RemoteObject?

顧名思義,即遠程對象。這裏指的就是在Flex中獲取Java裏的對象。有什麼用呢?這樣Flex可以更加簡單的獲取服務端的數據,比如你在 Java中有個方法進行了數據查詢,取出的結果是Array類型,那麼你可以很容易通過Flex裏的RemoteObject訪問到該類,並調用該方法,最後返回的數據是Flex也兼容的Array對象。

 

2.        新建Java類

File -> new ->other(如果你沒在列表中看到java class的話)

 

1).   新建嚮導1

 

2).   嚮導2

 

注意:別忘記了你設定的java源碼根目錄路徑,如果對java不熟悉的話,這裏我就不解釋了,照着做吧。

 

3).   編寫如下代碼

package com.test;

public class FirstJavaClass {
    public String sayHello(String str){
        return "你說的是:"+str;
    }
}

 

 

3.        配置Flex LCDS的Remoting-config.xml

 

1).   他是remoteobject和相關遠程訪問的配置文件,路徑位於

 

 

注意:現在LCDS是你的項目的一部分了,因此不用來回的在服務器中修改配置然後再發布了。

 

2).   改寫其代碼如下

<?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="FirstJavaClassRemoteObject">
        <properties>
            <source>com.test.FirstJavaClass</source>
            <scope>application</scope>
        </properties>
    </destination>    
</service>

 
 

說明:一個destination 指定的就是一個RO對象,他的id就是在Flex中RO請求的destination,source 指的是這個Java類的路徑

注意:在修改了配置文件後可能需要重啓web服務器(Tomcat)

 

4.        編寫mxml來請求RO

 

1).  打開MyFirstLCDS.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.ResultEvent;
              import mx.controls.Alert;
              private function callRO(str:String):void{
                    firstRO.sayHello(str);
              firstRO.addEventListener(ResultEvent.RESULT,getROResult);
              }
              private function getROResult(e:ResultEvent) :void {
                    Alert.show(e.result.toString());
              }
        ]]>
   </mx:Script>
   <mx:RemoteObject id="firstRO" destination="FirstJavaClassRemoteObject"/>
   <mx:Button click="callRO('hi~你好')" label="請求" />
</mx:Application>

 

 

2).OK,保存好後,用之前的方法來運行一下看看?

 

 

 

RemoteObject的簡單教程完

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章