AMF3+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. }   

/** * ... * @author Kinglong * @version 0.1 */ package project.test { import flash.display.*; import flash.events.*; import flash.net.*; import flash.utils.*; public class TestAMF extends Sprite { private var _loader:URLLoader; public function TestAMF() { trace("TestAMF"); _loader = new URLLoader(); _loader.dataFormat = URLLoaderDataFormat.BINARY; _loader.addEventListener(Event.COMPLETE, loaderHandler); _loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler); _loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler); var request:URLRequest = new URLRequest("http://localhost:8080/ajax/servlet/test"); _loader.load(request); } private function loaderHandler(event:*):void { trace(event.type); switch(event.type) { case Event.COMPLETE: var start:Number=getTimer(); var byte:ByteArray = _loader.data as ByteArray; byte.uncompress(); var obj:Object = byte.readObject(); var end:Number=getTimer(); trace("耗时:" + (end - start) + "毫秒"); trace(obj.fullName); break; } } } }

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. }   

import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.zip.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import flex.messaging.io.*; import flex.messaging.io.amf.*; public class TestServlet extends HttpServlet { private static final long serialVersionUID = -1079073749217155506L; private SerializationContext context = new SerializationContext(); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/x-gzip-compressed"); Amf3Output out = new Amf3Output(context); DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(response.getOutputStream())); out.setOutputStream(stream); Map map = new HashMap(); String[] arr = "1,2,3,4,5".split(","); map.put("datas", arr); map.put("userName","kinglong"); map.put("fullName", "金龙工作室"); map.put("domain", "klstudio.com"); out.writeObject(map); stream.finish(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值