[AS3]AMF3+JAVA的调用范例

0

本文作者:dmh2002  发布于:2008-9-11  分类:AS3 经验/技巧/游戏  点击:


[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和后台服务端的数据交换,我写了这个范例,希望能给大家一参考。

原文地址:http://www.klstudio.com/post/168.html

 

本文标签: AS3  java  
本文Url: http://dmh2002.com/post/116.html (出自: dmh2002's Blog)
我要引用: 点击这里获取该日志的TrackBack引用地址

相关文章:

111. [不完全翻译]TweenMax类   (2008-8-21 14:15:58)

106. Base64转byteArray再转bitmapdata  (2008-8-2 20:19:32)

105. 原创-使用Flex调试Flash编译的swf  (2008-7-29 23:8:20)

101. 在AS3中重置Array的几种方法的效率测试研究  (2008-7-29 17:55:35)

104. 字典和索引数组-提升性能小技巧  (2008-7-29 0:14:22)

99. 推荐一个国人开发的基于flash10的3D引擎  (2008-7-28 23:48:25)

102. 一些不太常见的代码写法(AS3)  (2008-7-27 0:8:14)

98. AS3.0中的类反射  (2008-7-22 21:42:17)

103. 12个常用的函数技巧,有的时候技巧就是这么简单   (2008-7-21 0:13:10)

96. 推荐一个实用的第三方库类as3corelib以提供API文档CHM版下载  (2008-7-13 11:6:47)

0 Comments

Write a comment ?