Flex+Java+Blazeds,flexjavablazeds
1、環境:jdk1.6,Flex4.6
2、工具:MyEclipse10
3、伺服器:Tomcat7
4、串連方式:Blazeds
5、項目類型:Flex項目
6、步驟
(1)建立Flex項目一個,命名為FlexToJava
填寫項目名之後,點擊“下一步”。
選擇BlazeDS,勾選“使用WTP…”,點擊下一步,下面預設,完成建立項目。
建立的項目目錄如下
(2)將建立的項目加入到Tomcat中
啟動Tomcat,運行FlexToJava .mxml頁面,啟動正常。
如果出現啟動錯誤
在Tomcat目錄conf下找到context.xml檔案,增加一句<Loader delegate="true" />即可
(3)切換到Java端,建立一個Java類FlexToJava.java
(4)找到WebRoot\WEB-INF\flex目錄下的remoting-config.xml,增加一段代碼用於配置的Java類。這裡的id就是Flex頁面RemoteObject中的destination屬性的值。
<destination id="myFlexToJava"><properties><source>com.java.FlexToJava</source></properties></destination>
(5)找到前台的Flex頁面——FlexToJava.mxml,寫入代碼調用背景Java方法。
具體代碼如下:
<?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:Script><![CDATA[import mx.controls.Alert;import mx.rpc.events.ResultEvent;protected function button1_clickHandler(event:MouseEvent):void{this.ro.getName(this.txt.text);this.ro.addEventListener(ResultEvent.RESULT,getName);}protected function getName(event:ResultEvent):void{Alert.show(event.result.toString());}//這裡有兩種處理傳回值的方法,一是在RemoteObject中直接寫入,還有一種是addEventListenerprivate function error(e:FaultEvent):void {errorMsg.text=e.message.toString();}]]></fx:Script><fx:Declarations><s:RemoteObject id="ro" destination="myFlexToJava" fault="error(event)"></s:RemoteObject></fx:Declarations><s:Label x="65" y="80" text="名字"/><s:TextInput id="txt" x="97" y="73"/><s:Button x="250" y="74" label="擷取" click="button1_clickHandler(event)"/></s:Application>
然後運行這個Flex檔案,獲得介面如下:
但是會報一個錯
[RPC Fault faultString="Send failed"
faultCode="Client.Error.MessageSend"
faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404:
url: 'http://localhost:8080/WebRoot/messagebroker/amf'"]
觀察這個錯誤,發現報的錯中url這一項不對,我們的地址應該是http://localhost:8080/FlexToJava,而非http://localhost:8080/WebRoot,故而要修改一個地方。
進入項目的“屬性”菜單,
選擇Flex伺服器,發現“內容檔案夾”一項是“WebRoot”字樣,記得把Flex編譯器中編輯器參數改成
“-services "D:/Workspaces/FlexToJava/WebRoot/WEB-INF/flex/services-config.xml" -locale en_US”,不然會報錯,因為Flex伺服器修改後這邊會自動把WebRoot改成FlexToJava,要改回來。
(6)重新部署項目,啟動Tomcat,運行FlexToJava.mxml,填入姓名,點擊按鈕,彈出對話方塊。成功!
這裡要注意URL,預設出的URL會少一個out目錄,需要在回合組態中再配置一下。或者在項目屬性菜單中,Flex構建路徑菜單下,輸出檔案夾URL項目填入http://localhost:8080/FlexToJava/out,運行時就會出現out目錄了。
後記
試了幾回,看能不能一次成功,結果不行,都是要再配置Flex伺服器中的內容檔案夾,或者別的方法,這是我得出的比較明晰的一種方法了,大概還有更好的,可以一次成型,先湊合用吧。
這是從Flex端建Flex項目,然後嵌入Java的方式,還可以從Java端建Java Web項目,然後嵌入Flex,我試了幾回也沒成功,只是學到一些別的東西。
從Java端建Java Web項目時,有一步是解壓Blazeds.war包,將得到的WEB-INF替換掉建立項目的WEB-INF,這裡面主要替換的就是WEB-INF下的flex檔案夾下的四個設定檔、幾個必須lib包和web.xml檔案。
其中,flex檔案夾下的四個設定檔中的remoting-config.xml檔案,我們從中配置了一段代碼,這段配置就是指引flex如何訪問java對象,同時也是指引Blazeds配置類映射的功能。另外這裡配置的一定是實作類別地址,不能是介面。services-config.xml檔案,註冊資料通道,下面這段代碼就定義了一個通道,Flex就通過這個通道與伺服器通訊。
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"><endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/></channel-definition>
上面的url我們有些許似曾相識,與我們上面的一個報錯“http://localhost:8080/WebRoot/messagebroker/amf ”很像吧,我們可以看出錯誤中WebRoot的位置應該放的是context.root(上下文根目錄),不知道是中文翻譯過來的問題還是什麼別的,我們的錯誤修改了“內容檔案夾”的值之後就解決了,但是這邊的意思應該是取的“上下文根目錄”的值。
關於Blazeds的知識和這幾個設定檔的知識,還要繼續學習。