servlet 使用AMF3和flash通讯

本文详细介绍了如何通过 Java Servlet 使用 AMF3 协议进行基于 HTTP 的数据传输至 AS3 客户端。包括 JSP 输出文本与 AMF3 协议不兼容的问题解决、Java Servlet 功能的优势以及具体代码实现。同时,提供了 AS3 客户端的加载与解析方法。


经过多次研究,终于实现了JAVA servlet 用AMF3协议基于http到as3的数据传输。

因为JSP输出文本,而AMF3协议是二进制流,所以JSP是做不出来的.

servlet中可以实现,servlet功能也能够满足服务器构架需求,甚至用servlet更好.

 

------------------------------java servlet代码----------------------------------------:

package tool;

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 amf3 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"); //JAVA ZIP
        DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(response.getOutputStream())); //JAVA ZIP
  Amf3Output out = new Amf3Output(context); //AMF3
        out.setOutputStream(stream);

  HashMap map = new HashMap();
  map.put("stat","1");  
        map.put("msg", "对象坐标"); 
  String[] arr = "1,2,3,4,5".split(",");  
        map.put("datas", arr); 

        out.writeObject(map);
        stream.finish();

    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
 {
        doPost(request, response);
    }

}

 

--------------as3客户端代码-------------------------


 public static function amf():void 
  {   
   
      var urlvar:URLVariables = new URLVariables(); 
    
             var ur:URLRequest = new URLRequest();
                 ur.url = "http://190.75.33.71/hj/amf3";
                 ur.data = urlvar;
                 ur.method = URLRequestMethod.POST;    
         
             var ul:URLLoader = new URLLoader();           
              
              ul.dataFormat = URLLoaderDataFormat.BINARY; //注意要搞成BIN格式       
                 ul.addEventListener(Event.COMPLETE, amf_loadcomplete);
                 ul.load(ur); 
         }  
          
        public static function amf_loadcomplete(evt:Event):void
            {  
                var byte:ByteArray = evt.target.data as ByteArray;  
                byte.uncompress(); //解压
         var obj:Object = byte.readObject();                
          main.txt.setText(obj.datas);                        
            } 

 

---------------------------说明---------------------------

所有的例子都是java端用的MAP封装过去,原来blazeds_devguide文档中有说明:

JAVA 中的 ArrayList                Array              HashMap.

                         |                       |                            |

AS 中的  ArrayCollection        Array                   Object

 

JAVA想用ArrayList必须在as3中使用ArrayCollection,而这个ArrayCollection是属于MX包的。纯as3项目中根本不能使用。所以全部的例子都是用的map,除了一个用FLEX的可以使用arraylist...

 

至此,网络传输方式终于可以使用AMF3了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值