用Flash远程调用增强J2EE表示层 |
时间:2014-05-04 10:04:06 来源:不详 作者:佚名 |
对Macromedia公司的Fl Swing之外又有了一种全新 . 本文调查了Flash远程调
| ash的远程调用使得Java开发者 的方式来构建J2EE(Java 2 Plat 用,解释了为何它有如此作用,
| 除了JSP(JavaServer Pages)和 form, Enterprise Edition)应用 并且提供了一个如何实现的例子
|
在任何多层体系中选择 Swing/AWT(Abstract Windo 容。但同时也使得当应用程 Swing,开发者可以轻易控 要既以比较小,基于浏览器 。对于这些情况,Macromed
| 表示层技术时,Java开发者通常 wing Tookit)。借助JSP,开发 序在不同的浏览器中发布时开发 制应用程序的行为,但要求用户 的方式发布同时又对用户的交互 ia Flash提供了一种可供选择的
| 有两种选择: JSP或者 者可以创建非常容易发布的动态内 者不易控制他们的运行情况。使用 安装Java运行时环境。当开发者需 有较高的可控性时也存在这种情况 解决方法。
|
一般来说,Macromedia 是,直到最近都没有出现标 Remoting MX的引入才得以 与Java, .NET和ColdFusion 布小的,基于浏览器的表示
| Flash比发布界面丰富,带有脚 准的方法可以将Flash应用整合 改变。Flash Remoting MX提供 之间进行通信。利用Flash Remo 层,同时可以对应用的行为进行
| 本程序的应用程序要优越。不幸的 进J2EE体系。这种状况随着Flash 了标准的通信层使Flash应用程序 ting,开发者得以在J2EE体系中发 足够的控制。
|
本文将解释为何Macro Flash适合于 用层如何得以改变,然后比较Flash和现
| 作为n层体系中应用层的解决方法。我将首先调查应 有标准,最后解释Flash如何应用于J2EE体系。
|
从Berners-Lee创建第一个基于Web的 之前,开发者不得不开发与服务器紧密结 Web服务器和HTML,开发者可以为用户发 或软件平台。这种方法对于应用层开发者 档的数据,但它不适合有多种表现的应用
| 系统至今,n层体系的表示层经历了一次变化。在那 合的客户端系统。所能利用的只有基本的HTTP协议, 布基于文档的应用系统,不管他们使用的是何种硬件 有一些基本问题: 虽然HTML可以成功地被传送基于文 —可与用户进行实时的交互。
|
为了解决这些不足,开 些新的特性,即Java和java 台无关的应用。实际上Java 装Java运行时环境(Java Ru 了需要安装客户端系统来运 的,特别是会使Internet的
| 发者开始在现代的浏览器(Netsc script。开发者第一次能够利用 小程序的使用从没有达到它的期 ntime Environment, JRE),并 行Java小程序外,客户端还需下 连接变得非常慢。
| ape Navigator 2.0以后)中开发一 Web浏览器平台发布丰富的,与平 望值。Java小程序要求用户已经安 且Web浏览器安装了Java插件。除 载Java小程序。这些是很耗费时间
|
除了这种解决方法外开发者有三种选 HTML(DHTML), applet/Swing, 或者第三
| 择来在客户端/服务器应用中使用丰富的前端: 动态 方解决方法。每种解决方法都各有利弊。
|
2. 使用DHTML所写的应用可以在支持DHTML的任何Web浏览器中配置 |
3. 基于Web的应用其客
| 户端通常都由文字和图片构成,
| 这允许小的应用脚本的存在。
|
DHTML也并不总是一个 :
| 好的解决方案;当选择这一技术
| 时你也必须要考虑到它的一些缺点
|
1. DHTML依赖用户的We 和版本多种多
| b浏览器来切实地将用户的原意
| 反映在应用中。由于浏览器的厂家
|
样,因此复杂的应用中必须嵌入工作区以使得应用能够在不同的浏览器中有着同样的表现 |
2. 尽管DHTML使得开发者可以更好地控制客户端行为,但这种灵活性也是有限的 |
3. 由于不同的浏览器在表现HTML和 Web浏览器创建
| 解释javascript上有一些不同,必须为各个不同的
|
不同的平台。加入工作区并将每个浏 论什么时候一
| 览器的实现分开增加了维护应用的复杂性。另外,无
|
个新的浏览器发布后,应用(或应用的一个部分)就必须重新编码并测试。 |
当开发者明确知道他在 如果企业内部网仅适用IE6.
| 标准的客户端配置什么样的应用 0,针对该浏览器的应用逻辑可
| 时,使用DHTML的确有它的优势。 以被处理得非常得当。
|
对于Java开发者而言, 如下的优点:
| 基于applet或swing的解决方案
| 是另外一种可行的解决方案。它有
|
1. 创建基于Java的应用无论对于用户还是开发者都是免费的 |
2. Applets可以通过大部分的浏览器进行配置 |
4. 使用Applets让客户端分担了一部分服务器的负载 |
选择使用基于applets的解决方案也 装了JRE. 即便安装了,也不一定是所需
| 必须衡量它的以下不足: 开发者不能确定用户是否安 要的版本。
|
Applets为开发者在标 ,开发者可以假定正确的JV
| 准客户端配置他们的应用提供了 M版本已经安装
| 很大的选择余地。对于标准客户端
|
除了使用applet/Swing
| 或DHTML应用,开发者还有一个
| 选择: 第三方解决方案。
|
第三方解决方案: Mecromedia Flash |
为了达到DHTML或applet应用同样的效果,第三方产品需要具备以下特性: |
有一些第三方解决方案在此领域共同 ,和Macromedia的Flash Suite。所有这 们都能应用在基于Web浏览器的应用程序 ActiveX和QuickTime,Flash为Java开发 何J2EE应用服务器上的方法。这就意味着 的业务逻辑可以不作任何改变地被基于Fl
| 竞争,包括Apple的QuickTime, Microsoft的ActiveX 三种解决方案在许多用户的系统上都得到了使用。它 之中,而用户不需付出任何代价。然而相比于 者提供了一个重大的助益:它允许客户端应用调用任 已经存在的EJB, servlets, Web services, 和类中 ash的前端调用。
|
服务器端产品Flash Re Remoting由两个重要的部分 服务器和客户端支持。网关 端支持组成为ActionScript
| moting使得Flash客户端可以调 组成:用于将本地的Flash对象和 应用在标准的war文件中,可在 (被Flash运行和配置工具所使用
| 用J2EE Server上的方法。Flash 方法映射到Java对象和方法的网关 任何J2EE应用服务器中配置。客户 的编程语言)增加的功能。
|
要让Flash Remoting工作,Flash应 (Java对象)的句柄并调用方法。这通过使 子与名为MX的Web应用中的网关连接,web
| 用必须连接到J2EE Server,获取它想要利用的服务 用ActionScript库(NetServices)来做到。如下的例 .xml文件servlet映射如下:
|
<servlet-name>Flas
| hGatewayServlet</servlet-na
| me>
|
<url-pattern>/gateway</url-pattern> |
//Load the NetServic
| es ActionScript Library
|
#include "NetServices.as" |
//Create a connection to the mx
| webapp running on port 80 on the local
|
NetServices.setDefau
| ltGatewayUrl("http://localho
| st/mx/gateway";);
|
//Invoke the createGatewayConnec //functionality
| tion to initialize the Flash Remoting
|
gatewayConnnection = NetServices
| .createGatewayConnection();
|
//Bind the Java Obje
| ct: com.tallan.data.provider
| s.FlashDemo
|
//to a service calle
| d tallanDataService.
|
tallanDataService = gatewayConnn
| ection.getService
|
("com.tallan.data.providers.Flas
| hDemo", this);
|
//Invoke a method ca
| lled getReportData on the se
| rvice named
|
tallanDataService.getReportData(); |
如上例子说明了连接到J2EE Server和调用一个方法的过程。 |
为了处理实际的工作, 。所有的远端调用都在异步 加回调函数。只要网关从J2 ,ActionScript函数的函数 getReportData(), 因此Act
| 必须在Flash客户端和J2EE Serv 方法中调用。为了支持从服务器 EE服务器上的函数返回值该回调 名必须与被调用的Java方法名一 ionScript回调函数应当命名为g
| er上的企业资源之间相互传递参数 上返回值,必须在Flash客户端添 函数就被调用。为了支持函数回调 致。在如下的例子中,方法是 etReportData_result;
|
function getReportData_Result(result) |
//Print the results
| from the app server to the
|
所有的方法调用信息, Format(AMF)的格式传递。A Object Access Protocol) 函数以更快的速度被调用。 有映射。
| 包括参数和返回值,都在客户端 MF是二进制信息格式,通过HTTP 的方式传送。在网络中,AMF信 Flash Remoting透明地处理Java
| 和服务器端以Action Message 以一种类似于SOAP(Simple 息比SOAP信息要小得多,因而允许 对象和ActionScript对象之间的所
|
使得Flash成为J2EE前 在全部在客户机上处理XML ActionScript代码解析一篇
| 端的一个重要的特性是它的内嵌 解析和DOM(document.nbspObje 应用于2D图形中的包含x和y坐标
| 的XML解析功能。Flash生来就能够 ct Model)传递。如下的 的XML文档:
|
public document.nbspgetReportData() |
System.out.println("calling getR
| eportData");
|
document.uilder builder = |
document.uilderFact
| ory.newInstance().newdocumen
| t.uilder();
|
doc= builder.newdocument.); |
//Create a record as the root element |
Element element = do
| c.createElement("graph");
|
Element child1=doc.createElement
| ("point");
|
child1.setAttribute(
| "xvalue", "February");
|
child1.setAttribute("yvalue", "20"); |
element.insertBefore(child1, null); |
doc.appendChild(element); |
这个简单的类将返回一个文档对象给Flash客户端解析; 下面的例子完成解析: |
//Parse the XML document.nbspre
| turned by the server,
|
//keeping the result
| s in an array called nodes
|
//Create a new array called nodes |
//Initialize the nodes array to |
//contain all of the reportXML.nodes;
| children of the reportXML d
| ocument.BR> nodes =
|
// childCounter is used as a cou
| nter for the child Nodes
|
//childNodes will co
| ntain the children of each n
| ode
|
childNodes = new Array(); |
//XAxisvalue will contain the x-
| axis value to plot
|
xAxisvalue = new Array(); |
//YAxisvalue will contain the y-
| axis value of the data sets
|
yAxisvalue = new Array(); |
//Iterate through th
| e first level children of th
| e XML Doc
|
for (j=0; j<=nodes.length; j++) |
//Check if the node Name is repo
| rt i.e., the data set
|
if (nodes[j].nodeName == "graph") |
//Get the background color of the graph |
bgcolor = "#000000";//snodes[j].
| attributes.bgcolor;
|
//Get the caption of the graph |
caption = nodes[j].attributes.caption; |
xaxisname = nodes[j].attributes.
| xaxisname;
|
yaxisname = nodes[j].attributes.
| yaxisname;
|
//Get the min value of the y-axis |
yaxisminvalue = nodes[j].attribu
| tes.yaxisminvalue;
|
//Get the max value of the y-axis |
yaxismaxvalue = node
| s[j].attributes.yaxismaxvalu
| e;
|
//Now, we get the childNodes |
childNodes = nodes[j].nodes; |
//Iterate through al
| l of the child nodes, pullin
| g out
|
//their x,y values and storing t
| hem in arrays
|
for (k=0; k<=childNodes.length; k++) |
//If the node name is Set i.e.,
| a graph data set, then we retrieve
|
if (childNodes[k].nodeName == "point") |
childCounter= childCounter+1; |
xAxisvalue[childCounter] = child
| Nodes[k].attributes.xvalue;
|
yAxisvalue[childCounter] = child
| Nodes[k].attributes.yvalue;
|
上面的例子简单地解析了XML文档并将它存储在各数组中共以后的应用使用。 |
世界上有很多Flash开 。有几个库可用来以图形格 绘制应用服务器产生的XML
| 发者。因而Macromedia的网站上 式绘制数据数组。通过使用这种 文档,如下图所示:
| 有很多免费的ActionScript库可用 方法,可以创建一个简单的应用来
|
由于Flash在处理丰富的媒体方面的 扩充,构想出一个更全面的图形应用。这 几个x-y坐标对的XML文档。将这些数据与 可以以一种令人愉快地方式为用户在图形 应用是不同的,因为Flash应用程序只须 调用,它允许用户放大,钻取, 或者作用 服务器上CPU的占用率时是非常有用的。 务器端的负载分配给客户端的能力将愈发 的工作交给客户端来做,从而将服务器解
| 优越性,你可以很容易地在上面的代码的基础上进行 个图形应用程序可以调用服务器上的方法来产生包含 一些可以自由使用的图形库结合在一起,Flash接口 上绘制出这些坐标。这个图形应用与基于HTML的图形 一次以XML格式得到数据,不用对服务器进行其它的 于未来的数据集。可以证明,这种方法在想要限制对 随着桌面电脑性能的变得越来越强大,应用程序将服 有用。Flash允许开发者将所有的XML解析和图形操作 放出来处理其它的请求,以此来达到上述目的。
|
尽管对于J2EE开发者而言前端配置有 DHTML解决方案适合于处理文档驱动或简 环境已经安装了JVM的情况下有一定优势 有意义。Flash在含有少量脚本的多媒体 Flash客户端整合进已有的J2EE体系结构
| 多种选择,但不同的选择效果是不一样的。HTML和 单的应用。而Swign/applet方案重量级应用中,配置 。然而,对于有些应用,Flash可能对客户端环境极 应用中有优势。利用远端工具,开发者现在可以将 中。
|
|
|
|
|