用Flash长途挪用加强J2EE暗示层
当前位置:以往代写 > JAVA 教程 >用Flash长途挪用加强J2EE暗示层
2019-06-14

用Flash长途挪用加强J2EE暗示层

用Flash长途挪用加强J2EE暗示层

副标题#e#

对Macromedia公司的Flash的长途挪用使得Java开拓者除了JSP(JavaServer Pages)和Swing之外又有了一种全新的方法来构建J2EE(Java 2 Platform, Enterprise Edition)应用. 本文观测了Flash长途挪用,表明白为何它有如此浸染,而且提供了一个如何实现的例子

在任何多层体系中选择暗示层技能时,Java开拓者凡是有两种选择: JSP可能Swing/AWT(Abstract Windowing Tookit)。借助JSP,开拓者可以建设很是容易宣布的动态内容。但同时也使恰当应用措施在差异的欣赏器中宣布时开拓者不易节制他们的运行环境。利用Swing,开拓者可以等闲节制应用措施的行为,但要求用户安装Java运行时情况。当开拓者需要既以较量小,基于欣赏器的方法宣布同时又对用户的交互有较高的可控性时也存在这种环境。对付这些环境,Macromedia Flash提供了一种可供选择的办理要领。

一般来说,Macromedia Flash比宣布界面富厚,带有剧本措施的应用措施要优越。不幸的是,直到最近都没有呈现尺度的要领可以将Flash应用整合进J2EE体系。这种状况跟着Flash Remoting MX的引入才得以改变。Flash Remoting MX提供了尺度的通信层使Flash应用措施与Java, .NET和ColdFusion之间举办通信。操作Flash Remoting,开拓者得以在J2EE体系中宣布小的,基于欣赏器的暗示层,同时可以对应用的行为举办足够的节制。

本文将表明为何Macro Flash适合于作为n层体系中应用层的办理要领。我将首先观测应用层如何得以改变,然后较量Flash和现有尺度,最后表明Flash如何应用于J2EE体系。

应用层的演化:

从Berners-Lee建设第一个基于Web的系统至今,n层体系的暗示层经验了一次变革。在那之前,开拓者不得不开拓与处事器细密团结的客户端系统。所能操作的只有根基的HTTP协议,Web处事器和HTML,开拓者可觉得用户宣布基于文档的应用系统,不管他们利用的是何种硬件或软件平台。这种要领对付应用层开拓者有一些根基问题: 固然HTML可以乐成地被传送基于文档的数据,但它不适合有多种表示的应用—可与用户举办及时的交互。

为了办理这些不敷,开拓者开始在现代的欣赏器(Netscape Navigator 2.0今后)中开拓一些新的特性,即Java和javascript。开拓者第一次可以或许操作Web欣赏器平台宣布富厚的,与平台无关的应用。实际上Java小措施的利用从没有到达它的期望值。Java小措施要求用户已经安装Java运行时情况(Java Runtime Environment, JRE),而且Web欣赏器安装了Java插件。除了需要安装客户端系统来运行Java小措施外,客户端还需下载Java小措施。这些是很淹灭时间的,出格是会使Internet的毗连变得很是慢。

除了这种办理要领外开拓者有三种选择来在客户端/处事器应用中利用富厚的前端: 动态HTML(DHTML), applet/Swing, 可能第三方办理要领。每种办理要领都各有利弊。

DHTML:

利用DHTML建设富厚的前端提供了如下利益:

1. DHTML是开放的而且免费

2. 利用DHTML所写的应用可以在支持DHTML的任何Web欣赏器中设置

3. 基于Web的应用其客户端凡是都由文字和图片组成,这答允小的应用剧本的存在。


#p#副标题#e#

DHTML也并不老是一个好的办理方案;当选择这一技能时你也必需要思量到它的一些缺点:

1. DHTML依赖用户的Web欣赏器来切实地将用户的原意反应在应用中。由于欣赏器的厂家和版本多种多

样,因此巨大的应用中必需嵌入事情区以使得应用可以或许在差异的欣赏器中有着同样的表示

2. 尽量DHTML使得开拓者可以更好地节制客户端行为,但这种机动性也是有限的

3. 由于差异的欣赏器在表示HTML息争释javascript上有一些差异,必需为各个差异的Web欣赏器建设

差异的平台。插手事情区并将每个欣赏器的实现分隔增加了维护应用的巨大性。别的,无论什么时候一

个新的欣赏器宣布后,应用(或应用的一个部门)就必需从头编码并测试。

当开拓者明晰知道他在尺度的客户端设置什么样的应用时,利用DHTML简直有它的优势。假如企业内部网仅合用IE6.0,针对该欣赏器的应用逻辑可以被处理惩罚得很是恰当。

Applet/Swing:

对付Java开拓者而言,基于applet或swing的办理方案是别的一种可行的办理方案。它有如下的利益:

1. 建设基于Java的应用无论对付用户照旧开拓者都是免费的

2. Applets可以通过大部门的欣赏器举办设置

3. Applets答允用户建设富厚的用户界面

4. 利用Applets让客户端分管了一部门处事器的负载

选择利用基于applets的办理方案也必需权衡它的以下不敷: 开拓者不能确定用户是否安装了JRE. 即便安装了,也不必然是所需要的版本。

Applets为开拓者在尺度客户端设置他们的应用提供了很大的选择余地。对付尺度客户端,开拓者可以假定正确的JVM版本已经安装

除了利用applet/Swing或DHTML应用,开拓者尚有一个选择: 第三方办理方案。

第三方办理方案: Mecromedia Flash

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

1. 任何尺度欣赏器都可以利用它

2. 应用措施的运行险些不需要用户的过问干与

3. 客户端的运行时间必需是免费可能至少很自制

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

#p#副标题#e#

#p#分页标题#e#

有一些第三方办理方案在此规模配合竞争,包罗Apple的QuickTime, Microsoft的ActiveX,和Macromedia的Flash Suite。所有这三种办理方案在很多用户的系统上都获得了利用。它们都能应用在基于Web欣赏器的应用措施之中,而用户不需支付任何价钱。然而对比于ActiveX和QuickTime,Flash为Java开拓者提供了一个重大的助益:它答允客户端应用挪用任何J2EE应用处事器上的要领。这就意味着已经存在的EJB, servlets, Web services, 和类中的业务逻辑可以不作任何改变地被基于Flash的前端挪用。

处事器端产物Flash Remoting使得Flash客户端可以挪用J2EE Server上的要领。Flash Remoting由两个重要的部门构成:用于将当地的Flash工具和要领映射到Java工具和要领的网关处事器和客户端支持。网关应用在尺度的war文件中,可在任何J2EE应用处事器中设置。客户端支持构成为ActionScript(被Flash运行和设置东西所利用的编程语言)增加的成果。

要让Flash Remoting事情,Flash应用必需毗连到J2EE Server,获取它想要操作的处事(Java工具)的句柄并挪用要领。这通过利用ActionScript库(NetServices)来做到。如下的例子与名为MX的Web应用中的网关系接,web.xml文件servlet映射如下:

<servlet-mapping>
<servlet-name>FlashGatewayServlet</servlet-name>
<url-pattern>/gateway</url-pattern>
</servlet-mapping>
//Load the NetServices ActionScript Library
#include "NetServices.as"
//Create a connection to the mx webapp running on port 80 on the local
//machine
NetServices.setDefaultGatewayUrl("http://localhost/mx/gateway";);
//Invoke the createGatewayConnection to initialize the Flash Remoting //functionality
gatewayConnnection = NetServices.createGatewayConnection();
//Bind the Java Object: com.tallan.data.providers.FlashDemo
//to a service called tallanDataService.
tallanDataService = gatewayConnnection.getService
("com.tallan.data.providers.FlashDemo", this);
//Invoke a method called getReportData on the service named
//tallanDataSerevice
tallanDataService.getReportData();

如上例子说明白毗连到J2EE Server和挪用一个要领的进程。

为了处理惩罚实际的事情,必需在Flash客户端和J2EE Server上的企业资源之间彼此通报参数。所有的远端挪用都在异步要领中挪用。为了支持从处事器上返回值,必需在Flash客户端添加回调函数。只要网关从J2EE处事器上的函数返回值该回调函数就被挪用。为了支持函数回调,ActionScript函数的函数名必需与被挪用的Java要领名一致。在如下的例子中,要领是getReportData(), 因此ActionScript回调函数该当定名为getReportData_result;

function getReportData_Result(result)
{
//Print the results from the app server to the
//debug window
trace(result);
}

所有的要领挪用信息,包罗参数和返回值,都在客户端和处事器端以Action Message Format(AMF)的名目通报。AMF是二进制信息名目,通过HTTP以一种雷同于SOAP(Simple Object Access Protocol)的方法传送。在网络中,AMF信息比SOAP信息要小得多,因而答允函数以更快的速度被挪用。Flash Remoting透明地处理惩罚Java工具和ActionScript工具之间的所有映射。

使得Flash成为J2EE前端的一个重要的特性是它的内嵌的XML理会成果。Flash生来就可以或许在全部在客户机上处理惩罚XML理会和DOM(document.nbspObject Model)通报。如下的ActionScript代码理会一篇应用于2D图形中的包括x和y坐标的XML文档:

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

#p#副标题#e#

应用处事器上的一个发生图形文件文档的类:

public class FlashDemo
{
public FlashDemo()
{
}
public document.nbspgetReportData()
{
document.nbspdoc =null;
try
{
System.out.println("calling getReportData");
document.uilder builder =
document.uilderFactory.newInstance().newdocument.uilder();
doc= builder.newdocument.);
//Create a record as the root element
Element element = doc.createElement("graph");
Element child1=doc.createElement("point");
child1.setAttribute("xvalue", "February");
child1.setAttribute("yvalue", "20");
element.insertBefore(child1, null);
doc.appendChild(element);

这个简朴的类将返回一个文档工具给Flash客户端理会; 下面的例子完成理会:

#p#分页标题#e#

//Parse the XML document.nbspreturned by the server,
//keeping the results 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 children of the reportXML document.BR> nodes = reportXML.nodes;
// childCounter is used as a counter for the child Nodes
childCounter = 0;
//childNodes will contain the children of each node
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 the first level children of the XML Doc
for (j=0; j<=nodes.length; j++)
{
//Check if the node Name is report 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].attributes.yaxisminvalue;
//Get the max value of the y-axis
yaxismaxvalue = nodes[j].attributes.yaxismaxvalue;
//Now, we get the childNodes
childNodes = nodes[j].nodes;
//Iterate through all of the child nodes, pulling out
//their x,y values and storing them 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] = childNodes[k].attributes.xvalue;
//Get the value
yAxisvalue[childCounter] = childNodes[k].attributes.yvalue;
}
}
}
}
}

#p#副标题#e#

上面的例子简朴地理会了XML文档并将它存储在各数组中共今后的应用利用。

世界上有许多Flash开拓者。因而Macromedia的网站上有许多免费的ActionScript库可用。有几个库可用来以图形名目绘制数据数组。通过利用这种要领,可以建设一个简朴的应用来绘制应用处事器发生的XML文档,如下图所示:

用Flash远程调用增强J2EE体现层

由于Flash在处理惩罚富厚的媒体方面的优越性,你可以很容易地在上面的代码的基本长举办扩充,构思出一个更全面的图形应用。这个图形应用措施可以挪用处事器上的要领来发生包括几个x-y坐标对的XML文档。将这些数据与一些可以自由利用的图形库团结在一起,Flash接口可以以一种令人愉快处所式为用户在图形上绘制出这些坐标。这个图形应用与基于HTML的图形应用是差异的,因为Flash应用措施只须一次以XML名目获得数据,不消对处事器举办其它的挪用,它答允用户放大,钻取, 可能浸染于将来的数据集。可以证明,这种要领在想要限制对处事器上CPU的占用率时长短常有用的。跟着桌面电脑机能的变得越来越强大,应用措施将处事器端的负载分派给客户端的本领将愈发有用。Flash答允开拓者将所有的XML理会和图形操纵的事情交给客户端来做,从而将处事器解放出来处理惩罚其它的请求,以此来到达上述目标。

将Flash整合进你的J2EE应用

尽量对付J2EE开拓者而言前端设置有多种选择,但差异的选择结果是纷歧样的。HTML和DHTML办理方案适合于处理惩罚文档驱动或简朴的应用。而Swign/applet方案重量级应用中,设置情况已经安装了JVM的环境下有必然优势。然而,对付有些应用,Flash大概对客户端情况极有意义。Flash在含有少量剧本的多媒体应用中有优势。操作远端东西,开拓者此刻可以将Flash客户端整合进已有的J2EE体系布局中。

    关键字:

在线提交作业