分享

使用URLLoader类来传输AMF3格式数据的调用实例 - Flash技术 - Kinglong's Blog

 ShangShujie 2010-12-28
  从Flash Player 9开始就支持AMF3格式的数据了(有关AMF3数据格式的优点,我在此就不做说明了,有兴趣的同学,可以查看我以后的文章,或去网上搜索一下),以前我 一直在Socket通信中使用过AMF3方式来传输数据的,今天我实然想在URLLoader类里使用AMF3格式来封装数据,于似乎我就写了以下调用实 例(中途也有出现一些难点,不过最终实现了)!
Flash端AS代码

  1. var loader:URLLoader = new URLLoader();  
  2. loader.dataFormat = URLLoaderDataFormat.BINARY;  
  3. loader.addEventListener(Event.COMPLETE, loaderHandler);  
  4. loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);  
  5. loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);  
  6.   
  7. var bytes:ByteArray = new ByteArray();  
  8. bytes.writeObject({a:"a",b:"b"});     
  9. bytes.objectEncoding = ObjectEncoding.AMF3;       
  10. var request:URLRequest = new URLRequest("http://localhost/data?r="+Math.random());  
  11. request.method = URLRequestMethod.POST;  
  12. request.data = bytes;             
  13. loader.load(request);  
  14.   
  15. function buttonHandler(event:Event):void{  
  16.     trace(event.type);  
  17.     switch(event.type){  
  18.         case Event.COMPLETE:  
  19.         var bytes:ByteArray = loader.data as ByteArray;  
  20.         var obj:Object = bytes.readObject();  
  21.         for(var key:* in obj){  
  22.              trace(key+":"+obj[key]);  
  23.         }  
  24.         break;  
  25.     }  
  26. }  



Java服务端代码(是写了一个Servlet)
  1. package com.klstudio.servlet;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4. import java.io.DataInputStream;  
  5. import java.io.IOException;  
  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.SerializationContext;  
  13. import flex.messaging.io.amf.ASObject;  
  14. import flex.messaging.io.amf.Amf3Input;  
  15. import flex.messaging.io.amf.Amf3Output;  
  16.   
  17. public class DataServlet extends HttpServlet {  
  18.   
  19.     private static final long serialVersionUID = 1L;      
  20.     private final SerializationContext context = new SerializationContext();  
  21.       
  22.     protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {  
  23.         Amf3Input amf3in = new Amf3Input(context);  
  24.         Amf3Output amf3out = new Amf3Output(context);  
  25.         ByteArrayOutputStream stream = new ByteArrayOutputStream();  
  26.         amf3in.setInputStream(new DataInputStream(request.getInputStream()));  
  27.         try {  
  28.             Object message = amf3in.readObject();  
  29.             System.out.println(message.toString());  
  30.             if(message instanceof ASObject){  
  31.                 System.out.println("message>>"+message.toString());  
  32.                 ASObject message1 = new ASObject();  
  33.                 message1.put("a""b");  
  34.                 message1.put("b""a");  
  35.                 amf3out.setOutputStream(stream);  
  36.                 amf3out.writeObject(message1);  
  37.                 amf3out.flush();  
  38.                 response.getOutputStream().write(stream.toByteArray());  
  39.             }  
  40.         } catch (Exception e) {  
  41.             // TODO Auto-generated catch block  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  
  45.       
  46.     protected void doGet(HttpServletRequest request,  
  47.             HttpServletResponse response) throws ServletException, IOException {  
  48.         this.doPost(request, response);       
  49.     }  
  50.   
  51. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多