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

被折叠的 条评论
为什么被折叠?



