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中找到)
客户端

/** 
* ... 
* @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;  
            }  
        }  
    }  
      
}  

服务端代码

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值