AMF3+JAVA的调用范例

amf是Adobe独家开发的数据封装格式,Flash可以直接访问,由于它是基于二进制的数据传输,所以相对于xml SOAP、json、webService等基于字符串的数据格式,有数据体积小和效率高的特点。
    amf目前有AMF0和AMF3两种格式,flash8以前版本只支持AMF0,flash9支持两种格式。AMF3比AMF0效率更高。
调试环境:
1、JDK 1.5
2、Resin .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和后台服务端的数据交换,我写了这个范例,希望能给大家一参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值