Flex + BlazeDS 学习笔记 (一) --- BlazeDS的功能原理及配置实例
2010年07月17日
BlazeDS Test Drive里面示例了主要的功能: 其实现是基于一个叫flex.messaging.MessageBroker的Servlet。各种消息通道的配置都存在于WEB-INF\flex\services-config.xml及其包含的3个XML文件中。下面简单介绍这四种不同的功能。 向服务器发送HTTP请求,典型用途是获取服务器端的XML内容。服务器端可以采用任何技术:JSP、Servlet、ASP、PHP等,只要在请求的URL里面指定即可。这是个异步请求,服务器会返回result或fault事件,分别对应成功和失败。可以把返回的结果直接绑定到DataGrid上。利用useProxy属性和crossdomain.xml可以跨域访问,这是解决沙箱效应的方法之一。
另一种方法就是不用HTTPService,而是写一个JS或PHP脚本,用Ajax(XMLHTTP Object) 去访问跨域URL。(跑题了)
示例:在proxy-config.xml配置HTTPService要请求的URL地址,在程序中用"destination"映射关系来访问该URL,如示例中的"catalog"。将J返回的XML内容绑定到控件上。 main.mxml WEB-INF\flex\proxy-config.xml /{context.root}/testdrive-httpservice/catalog.j sp 可以访问基于SOAP的web服务,其返回的对象自动被反序列化为ActionScript对象。数据绑定、沙箱问 题等与HTTPService相同。
示例:在proxy-config.xml配置WebService要请求的wsdl地址,在程序中用"destination"映射关系来访问该URL,如示例中的"ws-catalog"。将返回的对象绑定到控件上。 main.mxml proxy-config.xml http://livecycledata.org/services/ProductWS?ws dl * 让用户可以直接访问服务器上的对象的方法,要被访问的对象是一个JAVA类,和Servlet、JSP差不多,但是远程请求的这部分被隐藏起来了。返回的JAVA对象被自动反序列化为Actionscript对象,如果不加以指定类型,就成为一个动态对象。远程访问也是异步的,result或fault事件,分别对应成功和失败。
示例:在remoting-config.xml配置远程对象的类名,在程序中用"destination"映射关系来访问该类的示例,如示例中的"product"。将返回的java.util.ArrayList对象绑定到控件上。 main.mxml remoting-config.xml flex.samples.product.ProductService package flex.samples.product; import java.util.ArrayList; public class ProductService { public List getProducts() { List list = new ArrayList(); list.add(new Product(100, "abc")); return list; } } public class Product implements Serializable { private int productId; private String name; public Product(int productId, String name) {...} public int getProductId() { return productId; } public void setProductId(int productId) { this.productId = productId; public String getName() { return name; } public void setName(String name) { this.name = name; } } 消息本身包含消息头和消息体,消息头的格式是固定的,消息体的内容可以随意写。接触过状态机、分布式嵌入式系统编程的会很容易理解。
消息服务允许Flex客户端可以发布(Publish)和订阅(Subscribe)消息,相应的,客户端的被称为生产者(Producer)和消费者(Consumer),其实也就是发送和接受消息了。
当一个消息被发到已订阅的目的地(destination)时,就会触发一个客户端的message事件。发布的任何消息会发给所有订阅的人,即使是生产者自己。如果某一订阅方只想收到特定的消息,可以在订阅时使用selecor属性来指定过滤条件,只有符合条件的消息才会被服务器转发。如果想要服务器产生消息,可以产生一个flex.messaging.messages.AsyncMessage类的实例,用flex.messaging.MessageBroker发送出去。
示例:在服务器端发布消息。通过JSP或Servlet建立一个无限循环线程产生消息。在messaging-config.xml配置消息通道(channel),在程序中用"destination"映射关系来访问该通道,如示例中的"feed"。 startfeed.jsp Feed.java import java.util.*; import flex.messaging.MessageBroker; import flex.messaging.messages.AsyncMessage; import flex.messaging.util.UUIDUtils; public class Feed { private static FeedThread thread; public Feed() { } public void start() { if (thread == null) { thread = new FeedThread(); thread.start(); } } public void stop() { thread.running = false; thread = null; } public static class FeedThread extends Thread { public boolean running = true; public void run() { MessageBroker msgBroker = MessageBroker.getMessageBroker(null); String clientID = UUIDUtils.createUUID(); Random random = new Random(); double initialValue = 35; double currentValue = 35; double maxChange = initialValue * 0.005; while (running) { double change = maxChange - random.nextDouble() * maxChange * 2; double newValue = currentValue + change; if (currentValue initialValue - initialValue * 0.15) { currentValue = newValue; } else { currentValue -= change; } AsyncMessage msg = new AsyncMessage(); msg.setDestination("feed"); msg.setClientId(clientID); msg.setMessageId(UUIDUtils.createUUID()); msg.setTimestamp(System.currentTimeMillis()); msg.setBody(new Double(currentValue)); msgBroker.routeMessageToService(msg, null); System.out.println("" + currentValue); try { Thread.sleep(300); } catch (InterruptedException e) { } } } } } WEB-INF\flex\messaging-config.xml --> 示例:客户端可以发布和订阅消息,在messaging-config.xml配置消息目的地,在程序中用"destination"映射关系来访问该类的示例,如示例中的"chat"。注意,通道及其端点(endpoint)真正的定义是在service-config.xml中,messaging-config.xml中仅仅是引用它们。 WEB-INF\flex\messaging-config.xml WEB-INF\flex\service-config.xml 可以看到,messaging包括两大类不同的消息通道。分别是streaming channel和polling channel,每一类又有一些扩展类型。
采用polling channel,可以配置为每隔一段时间就轮询一次,也可以配置让服务器在无数据时等待,直到有数据时才响应(长轮询)。轮询响应完成后后就结束连接。
采用streaming channel时,服务器的响应一直保持连接状态,这样服务器一次连接后,可以持续下发数据到客户端。由于HTTP连接不是双工的,所以一条AMF或HTTP通道实际上需要2条浏览器连接,分别用于上行和下行数据。这第二条连接仅在需要向服务器发送数据时才建立,之后立即释放。这种通道特别适合实时性高、客户端刷新的应用。比起轮询,这种模式有效减少了反复建立连接的开销。
IE和Firefox浏览器在每个session最大连接数上有些不同。如果因此导致streaming channel建立失败,则BlazeDS会自动使用messaging-config.xml配置的下一个连接。
实例:定义多个默认通道,作为备份。 WEB-INF\flex\messaging-config.xml 如果不在XML中配置消息通道,也可以在Actionscript脚本中动态赋值。
发表评论
-
VBS脚本常用经典代码收集
2012-01-20 01:29 787VBS脚本常用经典代码收集 2010年06月21日 1. ... -
Flex文件上传
2012-01-20 01:29 723Flex文件上传 2010年06月06日 今天花了一点时 ... -
Flex与.net交互
2012-01-20 01:29 642Flex与.net交互 2010年07月14日 方法一: ... -
vb+Flex的关于FlashPlayer的检测
2012-01-20 01:29 581vb+Flex的关于FlashPlayer的 ... -
liunx编译android源码参考
2012-01-19 09:19 641liunx编译android源码参考 2011年10月20日 ... -
RHEL使用Centos的YUM源
2012-01-19 09:19 738RHEL使用Centos的YUM源 2011年11月04日 ... -
RedHat 6.0使用CentOS YUM源更新的方法
2012-01-19 09:19 1168RedHat 6.0使用CentOS YUM源更新的方法 2 ... -
Google Chrome涉及到开源代码列表
2012-01-19 09:19 1052Google Chrome涉及到开源代码列表 2010年07 ... -
ubuntu速配指南之热门设置
2012-01-19 09:19 777ubuntu速配指南之热门设 ... -
VS6.0安装总结(重启开机dll文件提示找不到的解决办法)
2012-01-17 01:53 2229VS6.0安装总结(重启开机d ... -
西门子网络问题解答
2012-01-17 01:53 2156西门子网络问题解答 2011年07月20日 SIMATI ... -
System32下每个DLL的作用
2012-01-17 01:53 1996System32下每个DLL的作用 ... -
2011-10-10program
2012-01-17 01:53 4622011-10-10program 2011年10月10日 ... -
MFC对话框程序基础复习001
2012-01-17 01:53 739MFC对话框程序基础复习001 2011年04月23日 ... -
Flex Builder3+FDT3 环境配置
2012-01-15 21:03 657Flex Builder3+FDT3 环境配置 2010年0 ... -
在Eclipse下使用Ant编译Flex程序
2012-01-15 21:03 644在Eclipse下使用Ant编译Flex程序 2010年04 ... -
什么是RIA AIR Flex,给你一次扫盲个够
2012-01-15 21:03 620什么是RIA AIR Flex,给你一次扫盲个够 2009年 ... -
Flex超酷皮肤主题推荐
2012-01-15 21:03 768Flex超酷皮肤主题推荐 2009年07月29日 当程序 ... -
学习Flex 和BlazeDS的十三个理由
2012-01-15 21:03 604学习Flex 和BlazeDS的十三 ...
相关推荐
Flex+BlazeDS+Java通信是构建富互联网应用程序(RIA)的一种常见技术组合,它允许前端的Flex客户端与后端的Java服务器进行实时双向通信。本文将深入探讨Flex、BlazeDS以及Java之间的通信机制,并提供相关的源代码...
4. "Flex 开发学习笔记2 - 采用的架构 BlazeDS + Spring + Hibernate" 可能是一个开发者的学习笔记,详细记录了构建基于这三个技术的完整应用过程,包括配置、数据绑定和事务管理。 5. "快速搭建Spring BlazeDS ...
而 `flex ssh conformity.TXT` 文件可能是视频中提到的笔记、配置示例或代码片段,帮助学习者跟随视频进行同步操作。 总的来说,这个视频教程的第二部分深入探讨了Flex、Spring和Hibernate的整合,是提升Java Web...
#### 一、BlazeDS简介及其功能 BlazeDS,作为Adobe公司的一款免费开源产品,旨在简化企业级应用的开发过程,特别是那些涉及到Flex和Java技术的项目。它源于Adobe的另一款产品LiveCycle Data Services(LCDS)的开源...
### Flex学习笔记:ActionScript与Flex开发入门 #### 1. ActionScript核心概念 ##### 1.1 类和对象(Class and Object) 类是对象的模板,定义了一组具有相同特性和行为的对象的共同属性和方法。在ActionScript中...
### Flex新手教程_入门级学习笔记 #### ActionScript核心概念 **ActionScript(简称AS)** 是一种面向对象的编程语言,主要用于开发Flex应用程序。掌握AS的基础知识对于学习Flex至关重要。 ##### 类和对象 (Class...
【Flex学习笔记】这篇笔记主要涉及的技术栈是Flex框架,结合BlazeDS、Spring和Hibernate进行Web应用开发。Flex是一种用于构建富互联网应用程序(RIA)的客户端技术,它基于ActionScript和MXML,通常用于创建交互式的...
3. `noteBook` - 这可能是一个笔记文件或者是一个Flex项目的一部分,可能包含了设计思路、代码注释或其他开发过程中的记录。 4. `JavaSource` - 这个目录可能包含了与Java相关的源代码,因为Flex常与Java后端结合...
BlazeDS是Adobe公司推出的一款开源的服务器端技术,它主要负责在Flex应用程序与Java后端之间提供数据推送服务,实现了富互联网应用(RIA)与服务器之间的实时通信。本资料包包含了两份重要的资源,分别是《BlazeDS...
而文件"〔分享〕AS3学习笔记 - RIACHINA 中国RIA开发者论坛 - Powered by Discuz!NT.htm"可能包含了社区论坛上关于AS3学习的经验分享、示例代码或疑难解答等内容,是深入学习AS3的好资源。对于初学者而言,理解AS3的...
标题中的“Flex学习第一章”指的是Adobe Flex,一个用于构建富互联网应用程序(RIA)的开源框架。Flex使用MXML和ActionScript编程语言,可以创建交互性强、功能丰富的Web应用程序。在本章中,我们可能将接触Flex的...
由于本人目前允许上传的资源太小,所以无法上传整个的技术学习笔记(JAVA 五年的工作经验和学习笔记),待以后有机会会分享给大家。 技术体系包括: J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)...
Flex for JSP.jar 是一个专为JavaServer Pages (JSP) 开发的库,它使得在JSP中集成Adobe Flex技术变得更为简便。Flex是一种基于ActionScript和MXML的开源框架,主要用于构建富互联网应用程序(RIA)。通过Flex,...
这本书的学习笔记深入探讨了Flex在企业级应用中的实际运用,涵盖了从基础到高级的各种主题。 1. **Flex SDK和Flash Builder**:Flex SDK是免费的开发工具集,包含了编译Flex应用所需的编译器和库。而Flash Builder...
10. **学习资源**:提供的“Flex与Java通讯-1.exe”和“Flex与Java通讯-2.exe”很可能是教学视频,而“flex连接java.TXT”可能是配套的代码示例或笔记,帮助学习者深入理解并实践Flex与Java的交互技术。 以上是关于...
J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)/LDAP/C++/Portal/即时通讯/数据建模/UML/UML设计工具(Rose、EA、PD等)/移动办公(Android、Symbian、Wap等技术)/项目管理(敏捷开发等)/软件架构...
Flex框架是Adobe开发的一种用于构建富互联网应用程序(RIA)的技术,它主要基于ActionScript编程语言。马鉴的笔记中提到了几种重要的Flex框架及其特点: 1. **Cairngorm**:Cairngorm是Adobe官方最早且最知名的Flex...