RIA技术:
学习Flex必须要了解RIA,RIA:Rich Internet Application,富客户端英特网应用程序,关键是富字。传统的HTML页面元素非常有限,开发人员在页面刷新和相应速度都会受到很大的困扰。随着3G的普及,网络带宽将得到非常大的改善,富互联网应用的时代也越来越近了,人们就能通过浏览器体验到以前C/S架构的桌面级应用。
RIA在页面的表现力和交互力都大大超过 了传统的HTML页面;
富客户端技术的实现主要有:
Ajax:Google最先使用,是现在用的最广泛的RIC技术;
Flex:Adobe公司产品,编译为swf文件运行;
JavaFX:sun公司规范,前途未知;
其他:Silverlight,微软已经看到了RIA市场的潜力,故而有了Silverlight,Silverlight从本质来说,是一种WPF应用程序,其界面使用XAML描述,后端可以用任何一种.NET兼容的语言开发;
从开发角度来说,现在的用户越来越重视界面的美化,即给人的视觉效果,所以说在以后我认为RIA会有很好的应用;
Flex简介:
Flash Player最早为Macromedia公司产品,作为因特网页的矢量动画平台,早期的Flash Player主要是面向娱乐功能和多媒体应用。其后推出了ActionScript语言做为补充,通过ActionScript可以对Flash Player中的动画和控件进行更为复杂的逻辑控制。2005年12月Adobe收购Macromedia公司,由此带了的巨大变革,Adobe将其打造为新一代的RIA,同时将此版本命名为Flex。
如果经常使用自己电脑的人会发现,我们在使用电脑的时候访问的很多网页都要求安装这个软件,否则不能正常浏览;
Flex是一套Adobe的RIA技术的集合,Flex应用在多层架构中做为表示层。Flex包括:Flex SDK、Flex Builder、Flash Player、LiveCycle Data Service、ActionScript、MXML。
Flex编程与Flash制作:
虽然对于Flex应用和多媒体应用都运行于Flash Player这同一平台,但对于动画、影音等多媒体应用仍然的是美工或媒体制作者的工作,而Flex应用编程则完全是程序员的工作,可以说是两套面向不同需求的应用开发。在Flex的GUI编程中提供了和Java、.NET、VB、Delphi中相类似UI控件,诸如:输入框、按钮、树、面板、表格、菜单、日期、进度条、各类选择框等,并与这些传统语言相类似的界面控制机制,诸如:消息、触发动作(Action)等。一个熟悉Java编程的开发者,很容易过渡到Flex的开发,ActionScript语言本身、甚至Flex中提供的很多类库都和Java相类似。从另外一个角度来看,一个Flex开发者完全不懂Flash制作也没有任何问题,Flex应用仅仅是运行在Flash Player上而已。当然做为Adobe的统一解决方案,Flex开发并不排斥对影音和动画等媒体的操作,实际上两者可以完美的结合。
通俗的说Flex主要由程序员使用,侧重于界面表单控件显示与事件处理编程,Flash为美工使用,侧重于动画效果。它们的相同点是都可以使用ActionScript语言,并且编译后的文件都为swf格式的flash文件。所以从这点上看也可以看出这存在着Flex技术的一个弊端,即浏览器或者说平台要运行Flex的话,就必须要借助于它的插件,或者单独的Flash播放器,而Ajax则本身利用的是浏览器的组件,而不需要安装插件;
Flex开发的两种语言:MXML和ActionScript;
深入Flex组件:
1、Flex SDK:
Flex SDK就如同Java的JDK一样,为开发人员提供了一个免费的开发套件,同时这也是一个开源的项目,开发者可以通过Flex SDK开发完整的RIA应用;
2、ActionScript:
类似于Java语言,文件后缀为as(源文件,编译后为swf)。Adobe 2007年3月27日发布了Flash 9.0,Flash 9.0支持全新脚本语言ActionScript 3.0,ActionScript 3.0是Flash/Flex历史上第二次飞跃,从此以后,ActionScript终于被认可为一种“正规的”、“完整的”、“清晰的”面向对象语言。新的ActionScript包含上百个类库,这些类库函盖了图形、算法、矩阵、XML、网络传输等诸多范围,为开发者提供了一个丰富的开发环境基础。
3、MXML:
假如我们要在界面上显示一个文本框,当然用ActionScript语言也能编写实现,但比较复杂,MXML就可以帮我们轻松实现。MXML是一种基于XML用于创建用户界面的功能强大的标记性语言。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Button id="Button" />
</mx:Application>
编译过程:使用mxmlc命令
实际上,在编译的时候,MXML会转化成ActionScript。
package {
import mx.core.Application;
import mx.controls.Button;
public class Example extends Application {
internal var button:Button;
public function Example( ) {
super( );
button = new Button( );
addChild(button);
} } }
一般我们使用MXML表现各种控件,使用ActionScript编写事件业务处理代码;从这方面说,你可以把MXML理解为html,而ActionScript理解为JavaScript,但本质上MXML会编译为ActionScript,Flex源码只有ActionScript。
4、Flash Player:
运行flash文件,类似JVM,一般浏览器包含。 Adobe Flash Player 10 ActiveX 适用于IE内核的浏览器(如IE、世界之窗浏览器、傲游浏览器等)。使用 ActiveX 技术编写(是IE内核独有的技术) Adobe Flash Player 10 Plugin 适用于非IE内核浏览器(Google 浏览器、Firefox(火狐)、Opera等)。 总之你两个都装上就行了,建议都装。
5、Flex Builder:
编译运行Flex的IDE工具,基于Eclipse开发。内置Flex SDK与Flash Player,4.0命名为Flash Builder。 要收费的,能免费使用60天(悲剧之处)。
6、LiveCycle Data Service:
LiveCycle Data Service的前身叫做Flex Data Service,即:Flex应用的数据服务。LC DS是将RIA应用同企业业务逻辑、J2EE、.Net等企业应用结合在一起的服务器软件。该服务器软件需要部署在应用服务器上,例如 WebSphere、WebLogic、JBoss、Tomcat和JRun等。 最最重要:它是收费的。
LiveCycle是Adobe企业解决方案平台,包含业务流程管理系统(LiveCycle Process Management)、企业版权管理系统(LiveCycle Rights Management)、表单服务(LiveCycle Forms)等12个解决方案组件。LiveCycle Data Service是其中的一个整合RIA应用和J2EE等企业应用的解决方案组件。
功能:
1. 提供RPC服务,即远程过程调用服务:基于HTTP或SOAP协议获取服务器端数据,或者基于AMF格式,通过调用远程对象获取数据和触发服务器端逻辑;
2. 提供数据管理能力:管理客户端和服务器端的数据同步、大规模数据的数据分页以及数据冲突等;
3. 提供消息服务:Web层客户端应用同服务端的消息发布和订阅,基于每个客户端的服务质量服务(QOS)、RTMP通道支持;
4. 提供支持离线应用的能力:例如离线数据缓存及本地消息队列等;
5. 提供企业Flex应用集成所需的代理服务、Web层编译Flex应用能力、支持WSRP接口的门户部署、集群部署、支持Ajax的数据服务、实现Flex RIA应用和Ajax程序交互的Flex-Ajax Bridge、多种服务适配器、服务器端PDF生成等其他各种服务。
7、BlazeDS:
可以理解为是LCDS的子集。客户端运行的flash程序需要调用Server中的java类,借助java类完成数据库访问等功能,通过blazeDS就可以访问调用这些Java类了。
blazeDS是开源免费的,LCDS是付费和闭源的。
8、AMF:
AMF是Action Message Format的缩写,是Adobe公司定义的协议,AMF是LCDS(blazeDS)与前端Flex应用通信的方式之一,BlazeDS和前端通信还可以采用SOAP或HTTP等其它协议。与这些通信方式不同,AMF采用二进制的编码方式,并采用Zlib对消息进行压缩,AMF消息体的大小只有基于XML协议的十分之一。因此在需要大量传输消息的场合,和纯文本协议相比,AMF是一种高效率的传输方式。同时AMF也为开发者提供了一种便利而快速的通信开发接口,它可将前端Flex中本地对象(例如:Object、Array、Date、XML等)传给Server端时自动适配成Server端适当的对象。例如:如果Server端是PHP应用,则AMF会自动转译为PHP的Associative Array;如果Server端是Java应用,则AMF将其转换为Java的数组