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

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

  将Flash整合进你的J2EE应用

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

【J2EE浅析】——表示层:Servlet & JSP

一、简介   JSP(Java Server Pages): JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页...
  • u010924897
  • u010924897
  • 2015年04月30日 11:22
  • 1269

J2EE三大框架各自的作用是什么?

JAVA三大框架Struts、hibernate和spring的各自作用是什么?struts 主要负责表示层的显示,spring 利用它的IOC和AOP来处理控制业务(负责对数据库的操作),hiber...
  • yangkeshihaer
  • yangkeshihaer
  • 2014年10月16日 16:48
  • 1044

JSF --J2EE 表示层技术

JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaSer...
  • moubenmao
  • moubenmao
  • 2013年05月02日 11:33
  • 1336

计算机网络基础之OSI七层参考模型(二、应用层、表示层、会话层)

OSI第七层:应用层   应用层,Application Layer,OSI应用层功能:提供应用协议,用户与网络面对面的接口。应用层的PDU为:APDU(应用层协议数据单元) 各位学习网络的朋友,肯...
  • czf2008700
  • czf2008700
  • 2013年08月19日 12:29
  • 2438

Java web 表示层技术

Java web 表示层技术 第一章:java web 工作原理 1.1解析http协议 HTTP是一种超文本传送协议。HTTP是一种无状态的协议,意思是指在web浏览器和web服务器之间不...
  • Clarissatt
  • Clarissatt
  • 2017年03月09日 13:26
  • 626

SSH三种框架及表示层、业务层和持久层的理解

Struts(表示层)+Spring(业务层)+Hibernate(持久层) SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)Struts:Struts是一个表示...
  • NK_TF
  • NK_TF
  • 2015年06月07日 18:11
  • 4698

J2EE的表现层、持久层、业务层

为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAO(Data Access Object)两种模式。DAO模式...
  • king0406
  • king0406
  • 2016年05月22日 20:12
  • 1523

Flash远程调用Red5方法

server 端 现在server端写一个想被调用的函数,放在 ApplicationAdapter 中: public class TeddyAgent extends ApplicationA...
  • prevention
  • prevention
  • 2013年03月29日 12:09
  • 1057

使用Eclipse开发J2EE项目详解

 第 1 章        Eclipse 简介1.1     选择Eclipse开发J2EE的背景与意义1.1.1背景说明  Eclipse和其它的众多Java IDE一样,可以免费下载。但是,Ec...
  • johnson_yjl
  • johnson_yjl
  • 2006年05月31日 20:22
  • 7765

https 原理简析

起因:周四下午要在公司做关于https的分享,就顺便结合已经写好的PPT,在CSDN 中也分享下。参考资料: 加密与解密 电子工业出版社 HTTP Over TLS RFC2818 The Tra...
  • woshiaotian
  • woshiaotian
  • 2015年07月29日 10:04
  • 663
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Flash远程调用增强J2EE表示层
举报原因:
原因补充:

(最多只允许输入30个字)