从Flash Player
9开始就支持AMF3格式的数据了(有关AMF3数据格式的优点,我在此就不做说明了,有兴趣的同学,可以查看我以后的文章,或去网上搜索一下),以前我
一直在Socket通信中使用过AMF3方式来传输数据的,今天我实然想在URLLoader类里使用AMF3格式来封装数据,于似乎我就写了以下调用实
例(中途也有出现一些难点,不过最终实现了)! Flash端AS代码
- var loader:URLLoader = new URLLoader();
- loader.dataFormat = URLLoaderDataFormat.BINARY;
- loader.addEventListener(Event.COMPLETE, loaderHandler);
- loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
- loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
-
- var bytes:ByteArray = new ByteArray();
- bytes.writeObject({a:"a",b:"b"});
- bytes.objectEncoding = ObjectEncoding.AMF3;
- var request:URLRequest = new URLRequest("http://localhost/data?r="+Math.random());
- request.method = URLRequestMethod.POST;
- request.data = bytes;
- loader.load(request);
-
- function buttonHandler(event:Event):void{
- trace(event.type);
- switch(event.type){
- case Event.COMPLETE:
- var bytes:ByteArray = loader.data as ByteArray;
- var obj:Object = bytes.readObject();
- for(var key:* in obj){
- trace(key+":"+obj[key]);
- }
- break;
- }
- }
Java服务端代码(是写了一个Servlet)
- package com.klstudio.servlet;
-
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.IOException;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import flex.messaging.io.SerializationContext;
- import flex.messaging.io.amf.ASObject;
- import flex.messaging.io.amf.Amf3Input;
- import flex.messaging.io.amf.Amf3Output;
-
- public class DataServlet extends HttpServlet {
-
- private static final long serialVersionUID = 1L;
- private final SerializationContext context = new SerializationContext();
-
- protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
- Amf3Input amf3in = new Amf3Input(context);
- Amf3Output amf3out = new Amf3Output(context);
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- amf3in.setInputStream(new DataInputStream(request.getInputStream()));
- try {
- Object message = amf3in.readObject();
- System.out.println(message.toString());
- if(message instanceof ASObject){
- System.out.println("message>>"+message.toString());
- ASObject message1 = new ASObject();
- message1.put("a", "b");
- message1.put("b", "a");
- amf3out.setOutputStream(stream);
- amf3out.writeObject(message1);
- amf3out.flush();
- response.getOutputStream().write(stream.toByteArray());
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request, response);
- }
-
- }
|