CSDN博客

img benjaminliang

用Flash远程调用增强J2EE表示层

发表于2004/7/14 23:46:00  852人阅读

用Flash远程调用增强J2EE表示层
来源:ChinaITLab 收集整理
2004-7-14 11:45:00
  对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, 或者第三
择来在客户端/服务器应用中使用丰富的前端: 动态
方解决方法。每种解决方法都各有利弊。

  DHTML:

  使用DHTML创建丰富的前端提供了如下优点:??????????????????????????????????

  1. DHTML是开放的并且免费??????????????????????????????????????????????

  2. 使用DHTML所写的应用可以在支持DHTML的任何Web浏览器中配置????

  3. 基于Web的应用其客
户端通常都由文字和图片构成,
这允许小的应用脚本的存在。

  DHTML也并不总是一个
:
好的解决方案;当选择这一技术

时你也必须要考虑到它的一些缺点


  1. DHTML依赖用户的We
和版本多种多
b浏览器来切实地将用户的原意

反映在应用中。由于浏览器的厂家

  样,因此复杂的应用中必须嵌入工作区以使得应用能够在不同的浏览器中有着同样的表现

  2. 尽管DHTML使得开发者可以更好地控制客户端行为,但这种灵活性也是有限的

  3. 由于不同的浏览器在表现HTML和
Web浏览器创建
解释javascript上有一些不同,必须为各个不同的

  不同的平台。加入工作区并将每个浏
论什么时候一
览器的实现分开增加了维护应用的复杂性。另外,无

  个新的浏览器发布后,应用(或应用的一个部分)就必须重新编码并测试。????????????

  当开发者明确知道他在
如果企业内部网仅适用IE6.
标准的客户端配置什么样的应用
0,针对该浏览器的应用逻辑可
时,使用DHTML的确有它的优势。
以被处理得非常得当。

  Applet/Swing:

  对于Java开发者而言,
如下的优点:
基于applet或swing的解决方案

是另外一种可行的解决方案。它有


  1. 创建基于Java的应用无论对于用户还是开发者都是免费的??????????????????

  2. Applets可以通过大部分的浏览器进行配置????????????????????????????

  3. Applets允许用户创建丰富的用户界面????????????????????????????????

  4. 使用Applets让客户端分担了一部分服务器的负载??????????????????????

  选择使用基于applets的解决方案也
装了JRE. 即便安装了,也不一定是所需
必须衡量它的以下不足: 开发者不能确定用户是否安
要的版本。

  Applets为开发者在标
,开发者可以假定正确的JV
准客户端配置他们的应用提供了
M版本已经安装
很大的选择余地。对于标准客户端


  除了使用applet/Swing
或DHTML应用,开发者还有一个
选择: 第三方解决方案。

  第三方解决方案: Mecromedia Flash????????????????????????????

  为了达到DHTML或applet应用同样的效果,第三方产品需要具备以下特性:??

  1. 任何标准浏览器都可以使用它??????????????????????????????????????????????

  2. 应用程序的运行几乎不需要用户的干涉??????????????????????????????????????

  3. 客户端的运行时间必须是免费或者至少很便宜????????????????????????????????

  4. 客户端应当可以与已有的业务逻辑结合在一起????????????????????????????????

  有一些第三方解决方案在此领域共同
,和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-mapping>????????????????????????????????????????????
  <servlet-name>Flas
hGatewayServlet</servlet-na
me>
  <url-pattern>/gateway</url-pattern>????????
  </servlet-mapping>??????????????????????????????????????????


  //Load the NetServic
es ActionScript Library
  #include "NetServices.as"????????????????????????????

  //Create a connection to the mx
webapp running on port 80 on the local
  //machine????????????????????????????????????????????????????????????

  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
  //tallanDataSerevice??????????????????????????????????????

  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
  //debug window??????????????????????????????????????????????????
  trace(result);??????????????????????????????????????????????????
  }????????????????????????????????????????????????????????????????????????????

  所有的方法调用信息,
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文档:

  <graph>????????????????????????????????????????????????????????????????
  <point>????????????????????????????????????????????????????????????????
  <xvalue>10</xvalue>????????????????????????????????????????
  <yvalue>5</yvalue>??????????????????????????????????????????
  <point>????????????????????????????????????????????????????????????????
  <point>????????????????????????????????????????????????????????????????
  <xvalue>20</xvalue>????????????????????????????????????????
  <yvalue>10</yvalue>????????????????????????????????????????
  <point>????????????????????????????????????????????????????????????????
  </graph>??????????????????????????????????????????????????????????????

  应用服务器上的一个产生图形文件文档的类:??????????????????????????????????????

  public class FlashDemo??????????????????????????????????
  {????????????????????????????????????????????????????????????????????????????
  public FlashDemo()??????????????????????????????????????????
  {????????????????????????????????????????????????????????????????????????????
  }????????????????????????????????????????????????????????????????????????????
  public document.nbspgetReportData()????????
  {????????????????????????????????????????????????????????????????????????????
  document.nbspdoc =null;????????????????????????????????
  try????????????????????????????????????????????????????????????????????????
  {????????????????????????????????????????????????????????????????????????????
  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
  function parseXML()????????????????????????????????????????
  {????????????????????????????????????????????????????????????????????????????
  //Create a new array called nodes????????????
  nodes = new Array();??????????????????????????????????????

  //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
  childCounter = 0;????????????????????????????????????????????

  //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
  //belongs to graph??????????????????????????????????????????
  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;??
  //Get the x-axis name????????????????????????????????????
  xaxisname = nodes[j].attributes.
xaxisname;
  //Get the y-axis name????????????????????????????????????
  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
  //and collect the values??????????????????????????????
  if (childNodes[k].nodeName == "point")??
  {????????????????????????????????????????????????????????????????????????????
  //Increment counter????????????????????????????????????????
  childCounter= childCounter+1;????????????????????
  //Get the x-axis name????????????????????????????????????
  xAxisvalue[childCounter] = child
Nodes[k].attributes.xvalue;
  //Get the value????????????????????????????????????????????????
  yAxisvalue[childCounter] = child
Nodes[k].attributes.yvalue;
  }????????????????????????????????????????????????????????????????????????????
  }????????????????????????????????????????????????????????????????????????????
  }????????????????????????????????????????????????????????????????????????????
  }????????????????????????????????????????????????????????????????????????????
  }????????????????????????????????????????????????????????????????????????????

  上面的例子简单地解析了XML文档并将它存储在各数组中共以后的应用使用。????????

  世界上有很多Flash开
。有几个库可用来以图形格
绘制应用服务器产生的XML
发者。因而Macromedia的网站上
式绘制数据数组。通过使用这种
文档,如下图所示:
有很多免费的ActionScript库可用
方法,可以创建一个简单的应用来

   flash
?

  由于Flash在处理丰富的媒体方面的
扩充,构想出一个更全面的图形应用。这
几个x-y坐标对的XML文档。将这些数据与
可以以一种令人愉快地方式为用户在图形
应用是不同的,因为Flash应用程序只须
调用,它允许用户放大,钻取, 或者作用
服务器上CPU的占用率时是非常有用的。
务器端的负载分配给客户端的能力将愈发
的工作交给客户端来做,从而将服务器解
优越性,你可以很容易地在上面的代码的基础上进行
个图形应用程序可以调用服务器上的方法来产生包含
一些可以自由使用的图形库结合在一起,Flash接口
上绘制出这些坐标。这个图形应用与基于HTML的图形
一次以XML格式得到数据,不用对服务器进行其它的
于未来的数据集。可以证明,这种方法在想要限制对
随着桌面电脑性能的变得越来越强大,应用程序将服
有用。Flash允许开发者将所有的XML解析和图形操作
放出来处理其它的请求,以此来达到上述目的。

  将Flash整合进你的J2EE应用

  尽管对于J2EE开发者而言前端配置有
DHTML解决方案适合于处理文档驱动或简
环境已经安装了JVM的情况下有一定优势
有意义。Flash在含有少量脚本的多媒体
Flash客户端整合进已有的J2EE体系结构
多种选择,但不同的选择效果是不一样的。HTML和
单的应用。而Swign/applet方案重量级应用中,配置
。然而,对于有些应用,Flash可能对客户端环境极
应用中有优势。利用远端工具,开发者现在可以将
中。
0 0

相关博文

我的热门文章

img
取 消
img