servlet 使用AMF3和flash通讯

来源:互联网 发布:淘宝七匹狼是真的假的 编辑:程序博客网 时间:2024/04/28 22:33


经过多次研究,终于实现了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了。

0 0