yafei's profile要做就做到全球最棒 要麼就不做PhotosBlogListsMore ![]() | Help |
|
January 28 Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(6)第15章 在Flash网络应用程序中应用XML(一)——基础应用XML(可扩展标记语言)正日益成为Internet应用程序中结构化数据存储和交换的标准。Flash也把其数据集成功能完全架构于XML之上,使用Flash创作环境,你可以非常轻松的创建Flash影片应用程序和服务器端的XML技术结合起来,而应用Flash Remoting MX for Java,你也可以把Flash Actionscript数据与使用复杂应用程序(如地址薄、聊天系统或者表单验证系统)的服务器集成起来,这些复杂的应用程序也一般都是使用XML技术建立起来的。 XML语法类似于HTML,都是使用标签来描述一段文本。HTML的标签是预定义的、固定的,我们只能使用,不能修改;XML则不同,它没有预先定义好的标签可以使用,而是依据设计上的需要,自行定义标签(例如你可以定义标签来标示一段数据的类型,就象下面的一行语句:<password>VerySecret</password>)。XML把信息的结构和显示的方式分开,这就允许相同的XML文档在不同的环境中使用和重用。 每个XML标签被称为节点(或称为元素),每个节点属于一种类型(1-XML节点,或者3-文本节点),而且节点都有属性。嵌入在一个节点中的节点称为该节点的子(或者子节点),由此构成一个树型层级结构,称为 XML DOM(文件对象模型),与JavaScript DOM非常相似(JavaScript DOM是网络浏览器中JavaScript元素的结构)。 这一章我们首先介绍怎样在Java架构下创建、使用和处理XML文档的基本知识,然后介绍怎样使用Flash影片应用程序和Flash Remoting MX for Java应用XML文档。 要注意,本章并不对XML文档的概念作详细描述,如果你想了解XML文档的信息可以参考其它的文档和图书。另外,因为XML对象是标准的Actionscript对象,属于基本的Flash知识,并非Flash Remoting MX的组成部分,所以本书也不再对Flash Actionscript XML对象作过多地介绍。 15.1 Java和XMLXML是Java一个重要的组成部分,在Java应用程序的开发过程中,我们初步总结了一下,它主要扮演下面的几种角色: 1Web应用程序部署描述符(web.xml) 2标签库描述文件(TLD) 3企业Bean部署描述符(ejb-jar.xml) 4使用转换为不同类型的客户端创建多种数据视图 5用于SOAP和开发Web服务 6基于XML的B2B交换所用的DTD(文档类型定义) 15.4在Flash影片应用程序中使用XML要在Flash影片应用程序中使用XML时,你可以使用下面的模式之一来处理XML数据: 1使用Flash影片应用程序可以直接调用XML文档并处理数据,这是Flash最早的功能之一; 2在Flash影片应用程序中不使用XML格式数据。Flash影片应用程序使用简单数据类型向服务器发送数据,如果需要的时候也可以使用XML对象。服务端方法可以产生并处理XML数据,这些函数可以将XML数据转化为简单数据类型,并传回Flash影片应用程序。 3在Flash影片应用程序中直接使用XML格式数据。服务端方法从Flash影片应用程序中获取XML,并将XML作为一个对象返回到Flash影片应用程序中。在Flash影片应用程序中使用ActionScript内建的XML对象和方法可以产生并处理XML。 针对这几种模式,也有不同的使用方法,下面,我们就来分别加以介绍它们的使用方法。 Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(5)第09章 在Flash影片应用程序中处理结果和结果集对象要连接到Java应用程序服务器上的Flash Remoting MX服务并且调用远程服务方法,就必须使用mx.remoting和mx.rpc这两个ActionScript类库:这两个类库包含了所有的Flash Remoting MX for ActionScript 2.0类和方法实现。 其中,mx.remoting是一个十分核心的ActionScript类库,它包含了用来与应用程序服务器建立连接的所有对象及方法,而mx.rpc可以用来调用远程方法并处理结果。 在前面的章节中,我们介绍了如何通过Flash Remoting MX网关服务在JSP网页和Servlet中向Flash影片应用程序传递数据,也介绍了如何使用Flash影片应用程序向JSP网页和Servlet传递参数,并且介绍了如何使用Flash Remoting MX for Java与JDBC结合调用数据库,而且创建了几个简单的例子。 但是,当从JSP网页和Servlet向Flash影片应用程序传递的数据被接收到时,如何处理接收到的结果呢?我们在前面的例子中已经使用了一些方法,这只是在Flash影片应用程序中处理结果丰富方法中最简单的,Flash Remoting MX for ActionScript 2.0组件内置了丰富的ActionScript脚本语法用来处理结果。 本章就来详细地介绍一下这些ActionScript脚本语法。
9.4使用DataGlue类处理记录集数据要在一个Flash UI组件中显示RecordSet记录集,一般可以使用该组件内建的setDataProvider()方法或者dataProvider属性,但是如果想在一个Flash UI组件中显示记录集中某一字段下的所有记录,就比较困难了。 例如,在前面的例子中,我们要在一个下拉列表框组件中显示记录集中酒店名,就必须首先创建一个新的单字段记录集,将原记录集中该字段的数据填充新的单字段记录集,然后再使用组件的setDataProvider()方法或者dataProvider属性,显然,这比较麻烦,而且占用的资源也比较多。 为了解决这个问题,Flash Remoting MX还内建了名为DataGlue的ActionScript类。使用DataGlue ActionScript类文件也可以在一个Flash UI组件中显示RecordSet记录集。DataGlue ActionScript类文件随同Flash Remoting MX组件一起被安装,要使用它,必须导入相应的类库,可以使用下面的一行脚本: import mx.remoting.DataGlue; DataGlue类有两个内建的方法:DataGlue.bindFormatStrings()和DataGlue.bindFormatFunction(),使用这两个方法都可以在Flash UI组件(例如组合框和列表框)中显示记录集。 9.4.1使用DataGlue.bindFormatStrings方法绑定记录集可以使用DataGlue.bindFormatStrings()方法在一个Flash UI组件(例如组合框和列表框)中显示RecordSet。下面的一段ActionScript脚本代码将结果RecordSet绑定到名为displayNames的列表框UI组件: DataGlue.bindFormatStrings(displayNames, result, "#ContactName#", "#customerID#"); 在这一段代码中,后两个参数被传递给函数(#ContactName#和#customerID#是记录集的字段名)。当用户选择组件中一个特殊的纪录时,ContactName列被显示在UI组件中,而customerID列被返回。下面,我们来改造一下前面的例子,看一下如何使用DataGlue类。 1打开前面一章我们创建的Restaurant_component.fla文档,将文档另存为Restaurant_component_DataGlue.fla; 2保持当前位于主时间轴编辑状态,修改主时间轴上的脚本代码。在”动作”面板上追加下面的一行脚本代码: import mx.remoting.DataGlue; 3在舞台上双击影片剪辑元件实例main_mc,使影片剪辑元件main处于编辑状态,选中层Script。保持该层被选中,在“动作”面板上修改其中的脚本代码: 将下面的一段脚本代码: var newRecordSet:RecordSet = new RecordSet(["hotelName"]); for (var i = 0; i<resultRecordSet.length; i++) { newRecordSet.addItemAt(i, {hotelName:resultRecordSet.getItemAt(i).hotel_name}); } if (newRecordSet.isLocal()) { newRecordSet.addItemAt(0, {hotelName:"请选择一个酒家或酒店"}); hotelName_cb.dataProvider = newRecordSet; } 替换为 DataGlue.bindFormatStrings(hotelName_cb, resultRecordSet, "#hotel_name#", "#hotel_name#"); 可以看到,前面多行代码实现的功能,现在只需一行就可以实现了。 4因为现在是使用DataGlue类,所以对于UI组件的读取方式也应该改变一下。在本例中,这段脚本代码位于函数applyFilter()体内: 将下面的一段脚本代码 list_lb.dataProvider = resultRecordSet.filter(thisFilter, hotelName_cb.selectedItem["hotelName"]); 替换为 list_lb.dataProvider = resultRecordSet.filter(thisFilter, hotelName_cb.selectedItem.label); 5最后可以测试一下效果,可以看到与前面的例子功能相同。 9.5使用RemotingConnector组件和数据绑定RemotingConnector是Flash的一个数据组件,使用该组件你可以非常轻松的建立与远程服务的连接——该远程服务必须是通过Flash Remoting MX网关提供——并且可以调用远程服务所定义的方法函数,使用它只需要将该组件拖放到舞台上并定义组件参数,而且可以使用Flash的数据绑定功能。 我们在这里要介绍的是首先是通过编写脚本代码的方式使用RemotingConnector组件。 9.5.1编写脚本代码使用RemotingConnector组件要通过编写脚本代码的方式使用该组件,也必须首先在开始将RemotingConnector组件拖放到当前舞台上(或者只要在库中就可以了),然后才能开始编写代码使用该组件,这是使用该组件的第一步。 另外,在编写脚本代码时要导入RemotingConnector类,这是使用该组件编写脚本代码的第一步,可以使用下面的脚本语句: import mx.data.components.RemotingConnector; 下面我们就使用一个例子来看一下怎样使用该组件。 1打开前面一节我们创建的Restaurant_component.fla文档,将文档另存为Restaurant_component_RC.fla; 2保持文档处于主时间轴的编辑状态,改变主时间轴上的脚本代码如下: stop(); //------------------------------------------------------------- //导入RemotingConnector类 import mx.data.components.RemotingConnector; //构造RemotingConnector组件实例并定义实例属性 var my_rc:RemotingConnector = new RemotingConnector(); my_rc.addEventListener("result", returnRowSet_Result); my_rc.addEventListener("status", returnRowSet_Status); my_rc.gatewayUrl = "http://localhost:8080/3JK/gateway"; my_rc.methodName = "returnRowSet"; my_rc.serviceName = "3JK"; my_rc.suppressInvalidCalls = true; function GetRestaurantInfo():Void { if (selectedhotel_name == undefined && selectedhotel_flavor == undefined && selectedhotel_location == undefined) { //定义参数为空 my_rc.params = null; //触发连接,调用远程服务方法 my_rc.trigger(); } else { //定义传递给远程服务方法的参数 my_rc.params = {hotel_name:selectedhotel_name, hotel_flavor:selectedhotel_flavor, hotel_location:selectedhotel_location}; //触发连接,调用远程服务方法 my_rc.trigger(); selectedhotel_name = "正在加载数据"; } } function returnRowSet_Result(ev:Object) { //接收结果 main_mc.list_lb.removeAll(); main_mc.list_lb.dataProvider = ev.target.results; selectedhotel_name = ""; fetchOK = 1; main_mc.resultRecordSet = ev.target.results; } function returnRowSet_Status(stat:Object) { //接收错误 trace("接收到错误"); } //初始化 function ini():Void { if (this.inited != undefined) { return; } else { var inited:Boolean = true; GetRestaurantInfo(); } } ini(); 3打开组件面板,将RemotingConnector组件拖放到舞台上创建一个实例(实际,只需放到库中就可以了)。 最后可以测试一下效果,可以看到与前面的例子功能相同。 Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(4)第06章 AMF-RPC for Java基础入门在前面的章节,我们介绍了Flash如何通过中间件JSP与服务器之间实现数据交换,了解了Flash影片应用程序如何融入到网络应用环境的最一般原理,有了基本的创建具有网络交互功能Flash影片应用程序的基本知识。 这一章,我们将开始使用Flash的一个最重要的服务器组件AMF-RPC来实现与Flash影片应用程序的交互,用户可以感受到更加强烈的Flash网络应用程序“感觉”,从而可以更轻松的创建功能更强大的Flash网络应用程序——这就是“富媒体应用程序”。 使用Flash作为开发工具,我们现在可以开始学习怎样使用AMF-RPC创建更为强大而且易用的富媒体应用程序了。 6.1 AMF-RPC技术简介AMF-RPC是使用AMF 数据格式实现的远程方法调用,Macromedia公司为此出品了三个个实现:Flash Remoting MX for J2EE(以前也被称为Flash Remoting MX for Java)、Flash Remoting MX for .NET和Flash Remoting MX for ColdFusion,并且开源社区也为AMF-RPC编写了一个在PHP架构下的实现,名为AMFPHP(也可以称为Flash Remoting MX for PHP)。 就如其它的RPC工具一样,AMF-RPC是一个应用程序服务器网关,它在Flash影片应用程序和远程服务之间提供一个相互通信的网络通道:在这个通道间传输的是AMF格式的数据(AMF是专用于Flash远程数据传输的一种数据格式);远程服务则包含各种应用服务技术(例如JavaBeans、ColdFusion组件和网页、ASP.NET网页或者Web服务等等)。 和其它的连接到外部数据提供者的技术相比,AMF-RPC的优点是不言而喻的。在前面一章我们介绍的像getURL、loadVariables、XML和XMLSocket等语句,它们都是使用的简单的HTTP功能,一般都离不开内建的类如Request和Response这样的语法,而AMF-RPC则有其独特的一面,总的说来有下列优点: [1]易用。AMF-RPC可以对本地远程服务程序代码(Java,CFML,PHP和C#)的数据类型进行自动转换:可以转换成ActionScript代码数据类型,也可以转回本地远程服务程序代码数据类型。 [2]高性能。AMF-RPC使用Action Message Format(AMF)将Flash影片应用程序和远程服务之间的通信信息序列化。AMF是一个二进制格式,符合Simple Object Access Protocol(SOAP)协议格式,通信更加快速。 [3]可扩展性。AMF-RPC设计的时候集成了现有应用程序设计模式和最佳的开发实践,从而可以满足高度扩展性Flash网络应用程序设计要求。 要了解这些优点,最好是先来看一个简单的使用AMF-RPC创建的Flash网络应用程序。
Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(3)第Ⅱ篇 Flash网络应用程序和Flash Remoting在第一篇,我们介绍了Java for Flash的基本原理,了解了怎样使用Flash内建的功能方法与Java实现交互,这种交互方式其实是一种极其简单的HTTP操作,来回传递的都是字符串格式的数据(XML也是字符串,需要解析为DOM)。 人们需要一种更为简洁的方式能够实现类似Native的操作,于是Flash Remoting便应运而生,这符合IT工业的一贯标准。 在这一篇,我们将介绍怎样使用包括XML-RPC、WDDX、SOAP和AMF-RPC(包括Flash Remoting MX和OpenAMF)等在内的Flash Remoting技术,开发人员可以更轻松的完成过去需要编写很多代码才能完成的任务。 本篇包含很多的章节,是本书的主体部分,主要就是介绍怎样使用各种Remoting工具实现Java for Flash的强大体验。
Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(2)第01章 开发和运行环境的安装与配置《Java for Flash动态网站开发手札》又被称之为网络三剑客,它提供了使用Flash Player、XML和Java建立下一代网络应用程序最迅速、最大限度节省投资和最具有挑战性的方法组合,这一组合事实上包含四个方面:Flash Player的应用环境、XML的应用环境、Java应用环境以及这三个应用环境的相互关联。 在Flash Player、XML和Java这三剑客组成的软件运行环境中:Java是基础架构,它为Java应用程序提供运行环境,并且JSP、Servlet、JavaBeans、EJB、JMX MBean等程序组件都是在后端运行;Flash Player是Flash影片应用程序在前端运行的解释器(也是一个虚拟机),必须安装在客户端。Flash Remoting是Flash影片应用程序连接到Java程序的服务器和网关,它们之间的连接也是在后端运行。 本章我们就来介绍怎样安装和配置网络三剑客的开发和运行环境。
1.1新架构的优点使用网络三剑客架构,事实上包含四个方面:Flash Player的应用环境、XML的应用环境、Java应用环境以及这三个应用环境的相互关联。 XML:标准的数据交换格式 尽管简单得令人难以置信,XML确实正在彻底改变我们创建和使用软件的方式。WEB彻底改变了用户与应用程序的交互方式:通过提供一种能使数据更易适配或更易转换的通用数据格式,XML正在彻底改变应用程序间的交互方式——或者更广义地说,计算机间的交互方式。包括SOAP和UDDI 在内的基于XML的标准,构成了应用程序间通信的开放式方法,此方法叫做XML WEB服务,而我更愿意称之为SOAP-RPC。 Java:开放的、成熟的和规范的基础架构 Java是目前市场上主流的企业及分布式应用程序开发平台,它是在Sun公司的领导下,多家公司参与共同制定的应用程序开发规范,正是因为它是一种规范、它的开放性,所以能够得到了业界的广泛支持。并且经历了几年的发展,Java已经经受住了市场的考验,成为一种成熟的开发平台。使用Java架构能够快速、高效的开发出可移植的、跨平台的、具有强大功能的企业级Web应用程序。 Java包含多种技术,它们之间互为补充,实现不同功能。包括:Java Servlet技术、Java Server Page(JSP)技术、JavaBeans技术、EJB技术等。 通过JSP(最终被编译成Servlet)和Servlet这一中间件,我们可以在Flash Player与服务端之间进行数据交换;而通过Java和Flash Remoting这两个中间件,使得创建服务端与Flash Player的关系变得更加容易,更加轻松自如。 Flash Player:跨平台跨设备的富媒体客户环境 Flash Player是功能强大的富媒体客户环境,只要平台或设备上正确的安装了Flash Player,用户就可以浏览使用Flash影片应用程序。 如同Java一样,Flash影片应用程序同样具备了一次开发,可以跨平台跨设备随意浏览的特性(而且不需要重新编译),这就是Flash的一个最大的优点。无论是在Windows、Mac、Linux、Unix还是在Symbian操作系统(Nokia应用于移动电话的一种操作系统)上,也不论你是在桌面PC上还是在掌上电脑或是移动电话上,Flash影片应用程序都能发挥它最大的特点。这一点我们想着重的作一下对比,如表1.1所示: 表1.1 Flash和Java对比
Flash Player内建的ActionScript脚本语言是Flash Player的交互语言,它有几个版本,每种版本的ActionScript的语法和风格各不相同,但可以在同一个运行时下协调工作。Flash Player不但可以凭借内建的XML类加载和解析标准的XML数据。而且通过Flash Remoting MX很轻松的连接到一个应用程序开发人员要使用的远程服务端和WEB服务并实现数据交换,使得Flash影片应用程序的开发简单有效。 并且,随着Flash Media Server(简称FMS)的发布,用户更可以将视频和音频(包括实时视频和音频)集成到应用程序中,实现声音、图像、文字、数据同步传播。并且,你也可以将声音、图像、文字、数据等录制下来,通过eMail发送出去(需要编程实现)。 并且,FMS服务器和Flash Remoting MX可以无缝的集成到一块儿。有了FMS服务器和Flash Remoting MX的集成,你从而可以连接数据库以及驱动Java应用程序服务器以创建功能更强的Flash影片应用程序,并将其融入到Flash Player当中,从而为终端用户带来全新的富媒体应用程序体验。 和传统的基于HTML的浏览器应用程序相比,Flash影片应用程序在创建动态和复杂的、友好的用户界面方面有其独到的优势,包括: 1Flash Player运行时执行代码、传递数据和调用远程服务 2客户端展示逻辑与服务端应用程序逻辑相互独立 3有效的利用带宽,不需要刷新整个网页,使用矢量图形 4可以部署在多个平台和设备上,并且非常简单 这就是深具魅力的《Java for Flash动态网站开发手札》。 技巧与提示 用户必须区分Flash Remoting MX和Flash Remoting。Flash Remoting MX是Macromedia的一款产品,在本书中我时常称之为AMF-RPC(本书中同时介绍的OpenAMF是AMF-RPC的另一种实现)。 Flash Remoting是一个宽泛的定义,包括XML-RPC、WDDX-RPC、RTMP-RPC(也就是FMS)等都可以称为Flash Remoting。而Flash Remoting MX(AMF-RPC)仅是Flash Remoting中的一种。 现在马上出发 Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(1)第Ⅰ篇 Java for Flash基础入门学习任何技术都有一个基础知识,Java for Flash也不例外。本篇包含几个章节,介绍了Java for Flash的基本知识。 在第一章,我们介绍了如何安装和配置Java for Flash的开发和运行环境,这样,用户就可以开发Flash网络应用程序以实现和Java应用程序的交互。 在随后的几章,我们介绍了如何使用Java语言、如何使用JDBC结合数据库以及面向对象的Java开发。 而在第五章,我们开始使用传统的JSP网页作为中间件方法开发Flash网络应用程序,与服务器之间实现数据交换,了解了如何建立网络环境的最一般原理,有了基本的创建具有网络交互功能Flash影片应用程序的基本知识,这是实现使用Flash影片应用程序作为网络应用程序主体的一次“飞跃”。 现在马上出发 January 23 Google 會對使用 Macromedia Flash 的網站建立索引嗎? 以下內容來Google的說明:
會的,Google 會對使用 Macromedia Flash 的網頁建立索引。不過,我們的檢索器可能會在產生 Flash 網頁索引時發生問題。如果您擔心網頁上的 Flash 內容會抑制 Google 檢索您網站的能力,您可以考慮使用如 Lynx 的文字瀏覽器來檢查您的網站。如果 Flash 此類的功能無法讓您以文字瀏覽器瀏覽您網站的所有內容,則當搜尋引擎的自動尋檢程式在檢索您的網站時就可能會有問題。
引自:http://www.google.com.tw/support/webmasters/bin/answer.py?answer=35267 January 03 《.NET for Flash动态网站开发手札》相关勘误、更新、下载(1) 我亦欢迎您直接在此留贴。谢谢!!!!
129页,第8步.应该是"调整第1帧和第20帧上矩形的高度至最小". 129页,第6步.应该是"第1帧和第2帧创建两个关键帧". 谢谢qinglu008的来信。 《Java for Flash动态网站开发手札》相关勘误、更新、下载(1) [更正启示0001:]
在书的81页第四行发现了一个文字错误-------webapp.aspx,应该是webapp.jsp才对。 [更正启示0002:] 不断更新中,我亦欢迎您直接在此留贴。谢谢!!!!
幾款值得關注的基於Flash的網路作業系統有幾款值得關注的基於Flash的網路作業系統,下面列出來: Flash和Java結合的方式總結(Flash和Java通訊)《Java for Flash動態網站開發手札》內包含了明確地介紹了Flash和Java結合開發時要用到的各種技術,但是它比較太寬了,包含了web伺服器和Java應用程式伺服器,下面我們在這裏做一個分隔出來的技術總結,怎樣在Flash和Java應用程式伺服器之間通訊: [1]使用MovieClip物件的getURL、loadVariables、loadVariablesNum方法可以使用HTTP或HTTPS協定以URL編碼格式向Java應用程式伺服器傳遞和接收資料。 [2]使用LoadVars類的load、send和sendAndLoad方法可以使用 HTTP 或 HTTPS 協定以URL編碼格式向Java應用程式伺服器傳遞和接收資料。 [3]使用XML類的XML.send、XML.load和XML.sendAndLoad方法可以以XML格式向Java應用程式伺服器傳遞和接收資料,這還包括一些基於XML的變種形式,例如WDDX、SOAP等。 [4]使用XMLSocket類的XMLSocket.connect 和 XMLSocket.send方法可以創建和使用TCP/IP套接字連接從而以XML 格式向Java應用程式伺服器傳遞和接收資料。 [5]使用Connection類或者NetConnection的call方法可以使用AMF協定向Java應用程式伺服器傳遞和接收資料,這被稱為AMF-RPC的方式,還包括其他的變種形式,但都統稱為AMF-RPC方式。
|
|
|