zoukankan      html  css  js  c++  java
  • [AS3]AMF3+JAVA的调用范例

     amf是Adobe独家开发的数据封装格式,Flash可以直接访问,由于它是基于二进制的数据传输,所以相对于xml SOAP、json、webService等基于字符串的数据格式,有数据体积小和效率高的特点。



        amf目前有AMF0和AMF3两种格式,flash8以前版本只支持AMF0,flash9支持两种格式。AMF3比AMF0效率更高。



    调试环境:

    1、JDK 1.5

    2、Resin 3.0

    3、Flash CS3

    4、flex-messaging-core.jar和flex-messaging-common.jar(这两个jar包文件可在Adobe的开源项目BlazeDS中找到)



    Flash客户端代码:

    1. /** 
    2. * ... 
    3. * @author Kinglong 
    4. * @version 0.1 
    5. */  
    6.   
    7. package project.test {  
    8.   
    9.     import flash.display.*;  
    10.     import flash.events.*;  
    11.     import flash.net.*;  
    12.     import flash.utils.*;  
    13.       
    14.     public class TestAMF extends Sprite {  
    15.           
    16.         private var _loader:URLLoader;  
    17.           
    18.         public function TestAMF() {  
    19.             trace("TestAMF");  
    20.             _loader = new URLLoader();  
    21.             _loader.dataFormat = URLLoaderDataFormat.BINARY;  
    22.             _loader.addEventListener(Event.COMPLETE, loaderHandler);  
    23.             _loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);  
    24.             _loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);  
    25.             var request:URLRequest = new URLRequest("http://localhost:8080/ajax/servlet/test");  
    26.             _loader.load(request);  
    27.         }  
    28.           
    29.         private function loaderHandler(event:*):void {  
    30.             trace(event.type);  
    31.             switch(event.type) {  
    32.                 case Event.COMPLETE:  
    33.                     var start:Number=getTimer();   
    34.                     var byte:ByteArray = _loader.data as ByteArray;  
    35.                     byte.uncompress();  
    36.                     var obj:Object = byte.readObject();  
    37.                     var end:Number=getTimer();   
    38.                     trace("耗时:" + (end - start) + "毫秒");  
    39.                     trace(obj.fullName);  
    40.                     break;  
    41.             }  
    42.         }  
    43.     }  
    44.       
    45. }  





    Java服务端代码

    1. import java.io.*;  
    2. import java.util.HashMap;  
    3. import java.util.Map;  
    4.   
    5. import java.util.zip.*;  
    6.   
    7. import javax.servlet.ServletException;  
    8. import javax.servlet.http.HttpServlet;  
    9. import javax.servlet.http.HttpServletRequest;  
    10. import javax.servlet.http.HttpServletResponse;  
    11.   
    12. import flex.messaging.io.*;  
    13. import flex.messaging.io.amf.*;  
    14.   
    15. public class TestServlet extends HttpServlet {  
    16.   
    17.     private static final long serialVersionUID = -1079073749217155506L;  
    18.       
    19.     private SerializationContext context = new SerializationContext();   
    20.   
    21.   
    22.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws  
    23.     ServletException, IOException {  
    24.         response.setContentType("application/x-gzip-compressed");  
    25.         Amf3Output out = new Amf3Output(context);  
    26.         DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(response.getOutputStream()));  
    27.         out.setOutputStream(stream);  
    28.           
    29.         Map map = new HashMap();          
    30.         String[] arr = "1,2,3,4,5".split(",");    
    31.           
    32.         map.put("datas", arr);  
    33.         map.put("userName","kinglong");  
    34.         map.put("fullName""金龙工作室");  
    35.         map.put("domain""klstudio.com");  
    36.           
    37.         out.writeObject(map);         
    38.         stream.finish();  
    39.           
    40.     }  
    41.       
    42.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws  
    43.     ServletException, IOException {  
    44.         doPost(request, response);  
    45.     }  
    46. }  





    因为AS3中的ByteArray支持zlib数据压缩和解压,所以我在服务端代码里增加数据压缩。



    AMF3很适合Flash和后台服务端的数据交换,我写了这个范例,希望能给大家一参考。

  • 相关阅读:
    <转>iOS SDK中使用NSXMLParser解析XML
    [原创]闲来无事,写了个c#的数据库附加工具,现附上源代码
    [转载]php数组操作foreach、each、reset、list
    [原创]xml序列化
    [原创]一个简单的药店用的会员积分管理系统
    [原创]我的cms项目
    简洁、标准的对联广告代码
    C#混淆 xenocode使用说明
    .net 随机数
    [原创]c# as用法
  • 原文地址:https://www.cnblogs.com/chinatefl/p/1366182.html
Copyright © 2011-2022 走看看