<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    AsWing 與 Java 之間的交互

    Web2.0 成就了AJAX,也促進了新技術在 RIA 行業的不斷演進,這之后出現的Adobe Flex AIR Microsoft SilverLight尤為突出,至于這兩種技術之間的優劣在此不做比較。

    作為實用主義者,在我看來能更快速、更好地幫助客戶解決問題的技術,那就是好的技術。072月的一個時間萌生了重新架構IMX即時通訊客戶端的想法,技術選型上我很看好Adobe Apollo 可人家還未發任何版,好在老朱幫我從Adobe 內部拿到了一份正在開發中的Apollo版本,試用后效果還是很不錯的,那會,估計我該是國內最早看到Apollo 真身的幾個外部開發人員之一吧。

     

    呵呵,就這樣有意無意的開始了AS3的開發了, Java 程序員來做 AS3 的開發,初學的人們問的最多的那句,便是二者之間該如何進行交互,如果您也關心于這個部分,OK,那這篇文章就是為您而生。   

     

    demo

     

    圍繞氣象服務,支持 http 、hessian 、amf3 多種接口實現,UI部分采用 AsWing 來開發,至于什么是AsWing ,詳情見《AsWing 簡介》。 

     

    package { 

        import c2s.Amf3ServiceInvoker; 

        import c2s.HessianServiceInvoker; 

        import c2s.HttpServiceInvoker; 

         

        import flash.display.Sprite; 

         

        import hessian.events.HessianErrorEvent; 

        import hessian.events.HessianResultEvent; 

         

        import org.aswing.AsWingManager; 

        import org.aswing.FlowLayout; 

        import org.aswing.JButton; 

        import org.aswing.JFrame; 

        import org.aswing.JOptionPane; 

        import org.aswing.JTextField; 

        import org.aswing.event.AWEvent; 

         

        public class aswing2java extends Sprite 

        { 

           private var myFrame:JFrame; 

         

        private var myAmf3Button:JButton; 

        private var myHessianButton:JButton; 

        private var myHttpButton:JButton; 

         

        private var myInput : JTextField; 

         

           public function aswing2java() 

           {                           

               AsWingManager.initAsStandard(this); 

         

                myAmf3Button = new JButton(“amf3″); 

                myAmf3Button.addActionListener(__amf3buttonClicked); 

                 

                myHessianButton = new JButton(“hessian”); 

                myHessianButton.addActionListener(__hessianbuttonClicked); 

                 

                myHttpButton = new JButton(“http”); 

                myHttpButton.addActionListener(__httpbuttonClicked); 

                 

                myInput = new JTextField(合肥,15); 

                 

                myFrame = new JFrame(this, 氣象服務); 

                myFrame.getContentPane().setLayout(new FlowLayout()); 

                myFrame.getContentPane().append(myInput); 

                myFrame.getContentPane().append(myAmf3Button); 

                myFrame.getContentPane().append(myHessianButton); 

                myFrame.getContentPane().append(myHttpButton); 

                 

                myFrame.setSizeWH(300, 200); 

                myFrame.show();               

           } 

            

           public function amf3Result(event : Object) : void { 

               JOptionPane.showMessageDialog(“amf3 “, String(event)); 

           } 

            

           public function amf3Error(event : Object) : void {           

           } 

            

           public function hessianResult(event :HessianResultEvent):void{ 

               JOptionPane.showMessageDialog(“hessian “, String(event.result)); 

           } 

            

           public function hessianError(event :HessianErrorEvent):void{ 

           } 

            

           public function httpResult(event : Object) : void { 

               JOptionPane.showMessageDialog(“http “, String(event)); 

           } 

            

           public function httpError(event : Object) : void {           

           } 

                

           private function __amf3buttonClicked(e:AWEvent):void {          

               var amf3ServiceInvoker: Amf3ServiceInvoker = new Amf3ServiceInvoker(amf3Result, amf3Error);           

               amf3ServiceInvoker.getWeather2(myInput.getText());          

           } 

            

           private function __hessianbuttonClicked(e:AWEvent):void { 

               var hessianServiceInvoker : HessianServiceInvoker = new HessianServiceInvoker(hessianResult, hessianError);  

            hessianServiceInvoker.getWeather2(myInput.getText()); 

           } 

            

           private function __httpbuttonClicked(e:AWEvent):void { 

               var httpServiceInvoker : HttpServiceInvoker = new HttpServiceInvoker(httpResult, httpError); 

               httpServiceInvoker.getWeather2(myInput.getText()); 

           } 

            

        } 

    }

       

    注:為降低復雜度,demo 中的 Java 服務端所有 Service 實現在此都不做敘述,我們已將服務部署到外網中,大家可通過aswing2java.zip 中的 code 來完成測試。  

      

     

    flash.net簡介 

      

    AS3 中,有關于網絡操作的類全部內置在 flash.net 中,理解這個 lib 將有利于我們更好的完成交互。

     

    URLLoader :用于從網絡或者本地讀取文件,可以通過設置他的 dataFormat 屬性改變收到的文本類型。默認值為 URLLoaderDataFormat.TEXT 純文本格式。

    URLLoader 部分事件。

    complete :使用 URLLoader.load() 方法后,數據完全加載完畢時觸發,說明程序加載完成。

    ioError 使用 URLLoader.load() 方法時, 發生致命I/O錯誤時觸發。

    open 使用 URLLoader.load() 方法后,開始從服務器下載數據時觸發。

    progress :使用 URLLoader.load() 方法后,在從服務器下載數據的過程中持續觸發, 通過偵聽此事件我們可以很方便的做信息加載狀態的顯示。

    securityError FlashPlayer 的安全異常, 比如跨域加載錯誤。

     

    URLRequest 用于傳遞變量到服務器,以及 URLLoader load 的目標路徑。 可以通過設置他的 contentType 屬性改變發送到服務器的變量類型。

    URLVariables :鍵/值對, user=zhuam&password=111

    URLLoaderDataFormat :用于設置讀取文件的類型,有 TEXT (純文本), VARIABLES (/值對)BINARY (二進制格式)URLLoader 會根據類型不同來進行解碼操作。

    URLRequestMethod 設置用哪種方式來傳遞數據, POST 或者 GET

    URLReqeustHeader URL HTTP 頭部。

     

    一、HTTPAS3 Remoting

     

    由于 Flash 對跨域訪問有嚴格的權限限制,故而獲取其他站點的頁面信息,我都是在服務端做了一層 Proxy。

    package c2s 

    { 

        import flash.events.Event; 

        import flash.events.IOErrorEvent; 

        import flash.events.SecurityErrorEvent; 

        import flash.net.URLLoader; 

        import flash.net.URLLoaderDataFormat; 

        import flash.net.URLRequest; 

        import flash.net.URLRequestMethod; 

        import flash.net.URLVariables; 

        import flash.utils.ByteArray; 

         

        public class HttpServiceInvoker 

        {       

           protected var resultCallbackFunction : Function;             

            protected var errorCallbackFunction : Function;   

            

           // 請求地址 

           private const urlAddress : String = “http://gcc.cuscstar.com:8080/weatherHttpProxy.jsp”; 

            

           public function HttpServiceInvoker(resultCallback : Function, errorCallback : Function) 

           { 

               resultCallbackFunction = resultCallback; 

               errorCallbackFunction = errorCallback; 

               super(); 

           } 

            

           public function getWeather2(city: String): void { 

               // 建立 URLRequest 對象 設置 GET 方法調用 

               var request : URLRequest = new URLRequest(urlAddress); 

               request.method = URLRequestMethod.GET; 

                

               var cityVar : URLVariables = new URLVariables(); 

               cityVar.city = city;         

               request.data = cityVar; 

                

               // URLLoader DATA FORMAT 設置 BINARY 格式用于做Response字符集的轉換 

               var loader : URLLoader = new URLLoader(); 

               loader.dataFormat = URLLoaderDataFormat.BINARY; 

                

               loader.addEventListener(Event.COMPLETE, resultCallback); 

               loader.addEventListener(IOErrorEvent.IO_ERROR, errorCallback); 

               loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorCallback); 

               loader.load(request); 

           } 

            

           private function resultCallback(event:Event):void {      

               /// 將接收的數據轉換為 ByteArry ,通過 readMultiByte 來轉換編碼格式 

               var ba:ByteArray = ByteArray(URLLoader(event.target).data); 

            var rhtml:String = ba.readMultiByte(ba.length, “gb2312″); 

             

            resultCallbackFunction(rhtml); 

        } 

         

        private function errorCallback(event:Event):void { 

             

        } 

     

        } 

    }

     

     

    二、Hessian 

     

    Hessian ( http://hessian.caucho.com/ria/ )Caucho公司制定的一個 RPC 協議,雖然它也是通過 HTTP協議傳輸 RPC 封包,但是它的 RPC 封包卻是以二進制形式編碼的,而且能夠表現對象模型和異常體系,這使得 Hessian XML-RPC 更有效率。 

     

    1、  首選需要我們去 http://hessian.caucho.com/#Flash/Flex 下載Hessian的最新Flash 版本 hessian-flash-3_1-snap.swc30k)。

     

    2、  引用該 swc 到您的 AsWing 項目中,下面這段代碼是通過AS3來調用 Java后臺的一個Hessian氣象信息服務,注:Java 部分的 Hessian 服務的開發與實現在此就不做敘述,有心之人皆可 Google ,講解的文章很多。 

     

    3、  AS3 通過 Hessian Java 交互 Code  ( 獲取城市天氣信息 ) 

     

    package c2s 

    { 

     

        import flash.events.IOErrorEvent; 

         

        import hessian.client.HessianAsyncToken; 

        import hessian.client.HessianProxy; 

        import hessian.events.HessianErrorEvent; 

        import hessian.events.HessianResultEvent;  

         

        public class HessianServiceInvoker {  

            

           protected var resultCallbackFunction : Function;             

            protected var errorCallbackFunction : Function;   

            

           private var proxy:HessianProxy = new HessianProxy(“http://gcc.cuscstar.com:8080/hessian/service.do”); 

            

           public function HessianServiceInvoker(resultCallback:Function, errorCallback:Function) {     

                resultCallbackFunction = resultCallback;      

                errorCallbackFunction = errorCallback;     

                super();     

            }     

            

            public function resultCallback(data:Object):void {         

                resultCallbackFunction(data);     

            }     

             

            public function errorCallback(data:Object):void {         

            }  

     

           public function getWeather2(city: String):void 

           { 

             var token:HessianAsyncToken = proxy.getWeather2(city); 

             token.addEventListener(HessianErrorEvent.HESSIAN_ERROR, errorCallback); 

             token.addEventListener(HessianResultEvent.HESSIAN_RESULT, resultCallback); 

           } 

        } 

    }

      

    三、AMF3 ( Action Message Format )

     

    Adobe就提出AMF(Action Message Format)技術,即將Java等語言的對象轉換為ActionScript對象的技術規范。AMF是將數據對象高度壓縮,編碼后作為2進制來傳輸的,比起WebServiceHTTPServiceXML在效率上的確是有很大的提升。 

     

    Adobe AMF協議及Java版本的AMF實現Blazeds也已經開放, 

    http://labs.adobe.com/technologies/blazeds/ 

    服務端Java AMF服務的實現,在此不做敘述,下面這兩個部分的代碼一個是用純AS3完成服務的調用,另一個采用Flex3 Framework 來完成服務的調用。 

     

    AS3 利用 Adobe AMF3 協議與 Java 交互 Pure AS3

     

    package c2s 

    { 

        import flash.net.NetConnection; 

        import flash.net.ObjectEncoding; 

        import flash.net.Responder; 

         

        public class Amf3ServiceInvoker  

        {              

                   

           private var nc : NetConnection = new NetConnection();    

           private var responder : Responder = null; 

           private const amf3URL : String = “http://gcc.cuscstar.com:8080/messagebroker/amf”; 

     

           public function Amf3ServiceInvoker(result : Function, error : Function) 

           {                     

               responder = new Responder(result, error);  

               super(); 

           } 

            

           public function getWeather2(city: String) : void{ 

               nc.objectEncoding = ObjectEncoding.AMF3;  

               nc.connect(amf3URL);      

               nc.call(“amf3ServiceInvoker.getWeather2″, responder, city); 

           } 

     

        } 

    }

    結束語

    ……

    下載資源

    posted on 2008-08-11 18:35 gembin 閱讀(689) 評論(0)  編輯  收藏 所屬分類: ActionScript3

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 在线看片韩国免费人成视频| 亚洲三级电影网站| 免费一本色道久久一区| 中文日本免费高清| 国产亚洲午夜精品| 亚洲人成网站免费播放| 亚洲神级电影国语版| 久久精品国产精品亚洲精品| 久久亚洲精品成人综合| 国产福利电影一区二区三区,免费久久久久久久精 | 久久99亚洲综合精品首页| 成年性生交大片免费看| 国产92成人精品视频免费| 99热这里有免费国产精品| 免费成人在线视频观看| 亚欧乱色国产精品免费视频| 免费看黄网站在线看| 亚洲精品私拍国产福利在线| 亚洲色自偷自拍另类小说| 日本免费xxxx色视频| 777爽死你无码免费看一二区| 亚洲Av无码国产一区二区| 亚洲人成中文字幕在线观看| 亚洲精品99久久久久中文字幕| 免费人成年轻人电影| 四虎永久成人免费影院域名| 国产乱弄免费视频| 亚洲成?v人片天堂网无码| 亚洲精品国产自在久久| 中文字幕专区在线亚洲| 亚洲人成网亚洲欧洲无码久久| 亚洲色中文字幕无码AV| 亚洲成Av人片乱码色午夜| 午夜亚洲国产理论秋霞| 337p日本欧洲亚洲大胆色噜噜 | 一级特黄aaa大片免费看| eeuss免费天堂影院| 成人自慰女黄网站免费大全| 久久青青草原国产精品免费| 久久久免费精品re6| 国产卡二卡三卡四卡免费网址|