as3调用java_[AS3]AMF3+JAVA的调用范例
amf是Adobe独家开发的数据封装格式,Flash可以直接访问,由于它是基于二进制的数据传输,所以相对于xml SOAP、json、webService等基于字符串的数据格式,有数据体积小和效率高的特点。
amf目前有AMF0和AMF3两种格式,flash8以前版本只支持AMF0,flash9支持两种格式。AMF3比AMF0效率更高。
调试环境:
1、JDK 1.5
2、Resin 3.0
3、Flash CS3
4、flex-messaging-core.jar和flex-messaging-common.jar(这两个jar包文件可在Adobe的开源项目BlazeDS中找到)
Flash客户端代码:
/**
* ...
* @author Kinglong
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
public class TestAMF extends Sprite {
private var _loader:URLLoader;
public function TestAMF() {
trace("TestAMF");
_loader = new URLLoader();
_loader.dataFormat = URLLoaderDataFormat.BINARY;
_loader.addEventListener(Event.COMPLETE, loaderHandler);
_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
_loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
var request:URLRequest = new URLRequest("http://localhost:8080/ajax/servlet/test");
_loader.load(request);
}
private function loaderHandler(event:*):void {
trace(event.type);
switch(event.type) {
case Event.COMPLETE:
var start:Number=getTimer();
var byte:ByteArray = _loader.data as ByteArray;
byte.uncompress();
var obj:Object = byte.readObject();
var end:Number=getTimer();
trace("耗时:" + (end - start) + "毫秒");
trace(obj.fullName);
break;
}
}
}
}
/**
* ...
* @author Kinglong
* @version 0.1
*/
package project.test {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
public class TestAMF extends Sprite {
private var _loader:URLLoader;
public function TestAMF() {
trace("TestAMF");
_loader = new URLLoader();
_loader.dataFormat = URLLoaderDataFormat.BINARY;
_loader.addEventListener(Event.COMPLETE, loaderHandler);
_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);
_loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
var request:URLRequest = new URLRequest("http://localhost:8080/ajax/servlet/test");
_loader.load(request);
}
private function loaderHandler(event:*):void {
trace(event.type);
switch(event.type) {
case Event.COMPLETE:
var start:Number=getTimer();
var byte:ByteArray = _loader.data as ByteArray;
byte.uncompress();
var obj:Object = byte.readObject();
var end:Number=getTimer();
trace("耗时:" + (end - start) + "毫秒");
trace(obj.fullName);
break;
}
}
}
}
Java服务端代码
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 TestServlet 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");
Amf3Output out = new Amf3Output(context);
DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(response.getOutputStream()));
out.setOutputStream(stream);
Map map = new HashMap();
String[] arr = "1,2,3,4,5".split(",");
map.put("datas", arr);
map.put("userName","kinglong");
map.put("fullName", "金龙工作室");
map.put("domain", "klstudio.com");
out.writeObject(map);
stream.finish();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doPost(request, response);
}
}
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 TestServlet 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");
Amf3Output out = new Amf3Output(context);
DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(response.getOutputStream()));
out.setOutputStream(stream);
Map map = new HashMap();
String[] arr = "1,2,3,4,5".split(",");
map.put("datas", arr);
map.put("userName","kinglong");
map.put("fullName", "金龙工作室");
map.put("domain", "klstudio.com");
out.writeObject(map);
stream.finish();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doPost(request, response);
}
}
因为AS3中的ByteArray支持zlib数据压缩和解压,所以我在服务端代码里增加数据压缩。
AMF3很适合Flash和后台服务端的数据交换,我写了这个范例,希望能给大家一参考。
as3调用java_[AS3]AMF3+JAVA的调用范例相关推荐
- java 调用服务器文档,JAVA远程调用服务器端方法
JAVA远程调用服务器端方法 内容精选 换一换 Windows Server 2012 R2操作系统弹性云服务器,本地使用远程桌面连接功能连接云服务器并启用redirected drive功能时,云服 ...
- java进程里面调用方法_在java里面调用CUI程序的方法
在java里面调用CUI程序的方法推荐查看本文HTML版本 在java里面调用CUI程序的方法 问题描述: 该函数在win平台上面调用不是很成功,GUI会可以调出来,但可能和屏蔽调其中的一些用 ...
- java怎么调用python_如何在Java中调用Python代码
Jython(原JPython),是一个用2113Java语言写的Python解释5261器.在没有第三方模块的情况下4102,通常选择利用Jython来调用1653Python代码,它是一个开源的J ...
- java 调用c 的dll,java如何调用C的dll
java怎么调用C的dll 我做了1个java调用c++的dll 想做一个java调用C的dll就不知道怎么做了 在xx.c里 写 JNIEXPORT jint JNICALL Java_testdl ...
- python中如何调用java_在Python程序中调用Java代码的实现
有头发且有趣的码农万里挑一~ 14 有料叔 | 一位有故事的程序猿 前 言 开发Python程序,需求中需要用到Java码,Python作为"胶水"语言能够很好的实现这种需求.具体 ...
- c 通过jni调用java_使用c通过jni调用java
编译环境: fedora16 gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) java version "1.6.0_31" Java(TM) ...
- cocos lua调用java_【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(三)
上周五下班前,打包成功了.我很高兴,周六去踢场足球,周日去现场看了最后一分钟掉球的恒大,度过了一个愉快的周末.然后,噩梦的周一开始了. 我再次打包,打算打包就安装,但结果是失败的.为何?我周五明明成功 ...
- java调用nodejs程序,从java里面调用node.js脚本
How can I call a node.js inside java and save the console.log values in a String variable? 解决方案 It i ...
- java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...
最新文章
- 《学习vi编辑器》的学习笔记1
- c++采集声卡输出_舒尔 Shure RMCE-LTG Lightning-MMCX接口耳机线[线型声卡]测评报告 [Soomal]...
- 【文件系统】删除文件名中含有空格的文件
- IIFE(立即执行函数表达式)
- [cogs1065]绿豆蛙的归宿
- VC++ (VS2008)里面char和LPTSTR的转换问题
- 平安 开源 数据库 实践_自举开源业务的3个最佳实践
- Spring Boot:在Spring Boot中使用定时任务
- Android现学现用第十二天
- 深度学习TF—3.神经网络全连接层
- CentOS6.8安装oracle11gR2
- Python_命名空间和作用域_25
- 计算机视觉论文-2021-09-14
- 计算机十个小技巧,Win10的10个实用小技巧,电脑小白轻松掌握,大大提升工作效率...
- java中的抽象工厂模式
- 部署 - 前端部署https服务,并配置安全证书
- Scheme语言 入门语法
- vim生成连续数字列
- 用Xilinx的FPGA实现HDMI(DVI)接收器
- Tomcat使用过滤器实现页面的限制访问,登录才能访问受限页面
热门文章
- Dynamics CRM 提示“操作无效”
- 人的价值不在于能力,而在于位置 » 社区 | Ruby China
- 在 Windows 窗体 DataGridView 单元格中承载控件
- 将窗体显示在 PageControl 上。
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
- dojo Quick Start/dojo入门手册--dojo.hitch scope/context
- 转 Spring.NET 与 NHibernate 的整合
- PHP 数据库连接池实现
- 比较正宗的验证邮箱的正则表达式js代码详解
- ELK报错no handler found for uri原因postman的原因