本文假设读者已了解 Flex 端如何通过 远程对象(RemoteObject)、以及 BlazeDS 框架调用 Java EE 服务器的远程方法,之前研究这东西花了不少时间,走了些弯路,这里写了些总结给需要的朋友。
JavaEE应用服务器(Tomcat) + BlazeDS(AMF实现框架) + Flex SDK(ActionScript 3)
参考(官方文档):
http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_4.html#201380
1、Java 对象 序列化到 Flex 客户端
客户端通过调用远程对象的方法,可以获取到远程数据,其中,一些 Java 对象将被自动转换为 AS 定义的对象,而自定义对象将按下面的方式转换:
Objects are serialized by using JavaBean introspection rules and also include public fields. Fields that are static, transient, or nonpublic, as well as bean properties that are nonpublic or static, are excluded.
Values found in public bean properties with get/set methods and public variables are sent to the client as properties on an 0bject. Private properties, constants, static properties, read-only properties, and so on are not serialized.
除已定义的类型外,标准的 JavaBean(get/set) 描述的数据成员、以及 对象的公有域 将被发送到远程 Flex 客户端(以下称序列化),成为一个对象(Object)。此外,静态域、瞬时域、非公有域,以及标准 JavaBean 的 非公有、静态域 将不会被序列化。
对于自定义类型,Flex 端得到的对象为 Object 类型,如果希望这个对象拥有强类型对象的功能(能进行逻辑处理,而不仅仅是传值),需要为与之对应的 AS 类注册一个别名,如 flash.net.registerClassAlias("zzx.javaserver.ro2.CustomObj2", Custom2),这样 Flex 端得到的 event.result 将为 Custom2 类型
如果集合容器和容器内的元素作为不同的属性一起被序列化到 Flex 端,那么对于该元素,Flex 虚拟机内只有一个实例:
public class Custom{
public List<C> list = new ArrayList<C>();
public C cObj = new C();;
public Custom(){
list.add(new C());
list.add(cObj);
}
}
Flex 端收到的对象中,cObj 和 list 中的一个元素对应同一个实例
2、Flex 客户端对象 序列化到 Java 服务端
除已定义的 AS 类型转换外,自定义 AS 对象将依据以下规定转换为 Java 对象:
- AS 中 get/set 方法描述的数据成员 以及 公有数据成员 将被序列化(For ActionScript objects, public properties defined with the get/set accessors and public variables are sent to the server.)
- AS 对象需加 [RemoteClass(alias="")] 元标签以声明映射到的服务端 Java 对象
- AS 对象和映射的 Java 对象的属性需保持一致(The Java and ActionScript property names should match.)
- 服务端对应的 JavaBean 对象必须有无参构造器
- 调用的远程对象方法时,参数表不能用来区别不同的 Java 重载方法(AS 不允许重载)
- 要序列化的 AS 对象需要将类型导入到运行环境,如使用 import,也可以使用强类型定义来保证(The ActionScript class to which data is converted must be used or referenced in the MXML file for it to be linked into the SWF file and available at run time. The class itself should use strongly typed references so that its dependencies are also linked.)
- 元标签 [Transient] 可以保证属性不被序列化
从 Flex 端传递到 Java 端的 String 对象保持单例特性
假如 Flex 端某个实例有多个不同的引用,那么序列化到 Java 端时,这多个引用将指向同一个实例
分享到:
相关推荐
BlazeDS通过AMF(Action Message Format)协议,实现了高性能、低延迟的数据传输,使得Flex前端可以高效地与Java后端进行交互。在本文中,我们将深入探讨如何使用BlazeDS来整合Flex和Java,以及在这个过程中可能遇到...
AMF是一种二进制数据格式,能够高效地序列化和反序列化ActionScript对象,使得 Flex与Java之间的数据交换更为快速和高效。Apache BlazeDS和LCDS(LiveCycle Data Services)是两个常用的中间件,它们提供了AMF支持,...
《Flex前端与Java服务端交互反射机制》 在软件开发中,前端与后端的交互是必不可少的一部分。本文主要探讨了使用Flex作为富互联网应用程序(RIA)前端与Java服务端进行交互的反射机制。Flex以其丰富的用户体验和...
AMF是一种轻量级的序列化格式,可以将ActionScript对象和Java对象互相转换,使得Flex客户端和服务器之间的数据交互变得简单且高效。 在"flex3集成BlazeDS的HelloWorld"项目中,我们首先需要在服务器端配置BlazeDS。...
传统的HTTPService、WebService、URLLoader及FileReference等组件虽然能够实现基本的通信功能,但在面对大量数据传输和复杂对象序列化时显得力不从心。这时就需要引入更高效的通信协议来解决这些问题。AMF(Action ...
1. AMF (Action Message Format):AMF是FLEX与服务器间进行数据交换的标准格式,它提供了高效的序列化和反序列化机制,使得数据在网络中传输时占用更少的带宽。AMF支持多种数据类型,包括对象、数组、日期等,并且...
AMF是一种二进制序列化格式,用于在Flex和Blazeds之间高效地传输数据。它相比XML或JSON等文本格式,能大幅减少数据传输量,提高性能。Blazeds支持AMF0和AMF3两种版本,其中AMF3提供了更高级的数据类型支持。 7. **...
BlazeDS是Adobe公司开发的一款开源的服务器端技术,它主要负责实现Java应用程序与客户端的Flex应用程序之间的数据交互。BlazeDS的出现极大地推动了富互联网应用(RIA)的发展,使得开发者可以利用Flex的图形界面优势...
通过以上步骤,我们就建立了一个基础的Flex+Java+BlazeDS开发环境,使得Flex客户端能够通过AMF与Java服务端进行高效的数据交换。这种架构广泛应用于需要动态用户界面和实时数据交互的应用场景,例如企业级的Web应用...
标题中的“Flex Spring框架成BlazeDS”意味着我们要讨论如何将Spring框架与BlazeDS集成,以便在Flex客户端与Spring服务端之间进行数据交换。BlazeDS是Adobe提供的一个免费服务器端组件,它允许Flex应用程序通过HTTP...
2. **Spring与BlazeDS集成**:Spring BlazeDS Integration是Spring框架的一部分,它提供了一套完整的工具集,包括Spring配置、Spring MVC适配器和数据传输对象(DTO),以简化BlazeDS与Spring应用的集成。...
Flex与Java的通信是Web应用...在实际项目中,HelloFlexPro可能是一个演示或示例项目,用于展示如何使用Blazeds RemoteObject组件进行Flex与Java的交互。开发者可以通过研究该项目的源码,进一步加深对这一技术的理解。
Flex客户端可以通过 BlazeDS 或 GraniteDS 这样的中间件与Fiji服务端进行AMF通信,传递数据和服务调用。 在实际项目中,结合Fiji、JSF和Flex的优点,可以构建出既有丰富用户体验又具备强大后端功能的应用。JSF处理...
AMF是一种高效的数据序列化格式,能快速传输复杂的数据结构,使得客户端和服务器之间的交互更加高效。 集成步骤主要包括以下几点: 1. **环境配置**:确保安装了Flex SDK和IDE,如Flash Builder。同时,需要在Java...
AMF是一种高效的二进制序列化格式,用于Java和Flex之间的数据传输。它比XML更快,更节省带宽,且BlazeDS支持AMF3版本。 7. **事件驱动编程** BlazeDS支持发布/订阅模型,使得Java服务器可以主动向Flex客户端推送...
AMF允许Flex客户端以高效的方式与基于Java的BlazeDS或LCDS服务进行数据交换,使得数据序列化和反序列化更快速,减少了网络传输开销。 4. **BlazeDS**: BlazeDS是Adobe提供的开源项目,它提供了与Java服务器的实时...
BlazeDS支持AMF(Action Message Format),这是一种高效的数据序列化协议,能将数据快速、低开销地传输到Flex客户端。BlazeDS还提供了HTTP和WebSockets协议支持,实现了Remoting和Messaging功能,使得Flex应用可以...
这个过程涉及到了数据的序列化和反序列化,以及错误处理,这些都是Flex与Java通信的重要环节。 在实际项目中,还需要考虑安全性问题,如身份验证和授权。可以使用Flex Security框架和Java的安全组件来实现用户登录...
AMF是一种高效的二进制序列化格式,可以快速传输复杂的数据结构,如对象和数组,减少网络延迟。 2. **C# WinForm中的WCF服务**:Windows Communication Foundation (WCF) 是.NET Framework的一部分,用于构建面向...
Flex与Java之间的数据交换是跨平台应用程序开发中的一个重要环节,特别是在构建富互联网应用程序(RIA)时。...通过AMF,不仅可以传递简单类型的数据,还能传输复杂对象,使得前后端之间的交互更加灵活和高效。