将 Web 服务和客户机绑定在一起
既然已经完成了 Web 服务,并布局了富客户机,就必须将它们绑定在一起。本节中有两个例子,展示如何从 OpenLaszlo 客户机调用 Web 服务。
简单的 Web 服务调用
在前一个例子中,楼宇和楼层组合框的内容是从静态位置数据集构建的。尽管这对于布局应用程序来说没有问题,但是它对于长期的维护来说不是一个好主
意。您不想在每次添加一个新的楼宇时都必须更新代码。这可以形象化为一个从 Web 容器加载的 .xml
文件,但是这也似乎有太多的工作需要维护。相反,该列表和其他选择列表有可能来自 Web 服务和数据库。因此,Web 服务具有一个 getBuildings()
操作。
清单 9 是一个调用 getBuildings()
操作的例子。
清单 9. getBuildings() 操作
<dataset name="location" />
<soap name="WorkOrderService"
wsdl="http://localhost:8080/fms/wsdl/WorkOrderService.wsdl"
autoload="true">
<remotecall name="getBuildings"
funcname="getBuildings" dataobject="location">
<method event="ondata" args="value">
debug.write(location.serialize());
</method>
</remotecall>
<method event="onload">
WorkOrderService.getBuildings.invoke();
</method>
<method event="onerror" args="error">
debug.write('error:', error);
</method>
</soap>
|
XML 已经从位置数据集删除掉了。这现在动态地由来自 getBuildings()
操作调用的 XML 所填充。
接下来,使用 soap
元素定义 SOAP 服务器。这里,您需要给它一个名称和一个到利用 Web 服务生成的 WSDL 的 URL。对于本例来说,自动加载 Web 服务,因为您想要用户一查看页面就填充组合框。
在 SOAP 定义中,也需要在您将要使用 remotecall
元素调用的 Web 服务上声明远程操作。这里,您定义了 getBuildings
操作。name
属性是在执行操作时 JavaScript 引用的本地名称,而 funcname
属性必须匹配 WSDL 中的名称,这与 Web 服务 Java 类一样。dataobject
属性指出将用结果填充哪个数据集。指定前面使用过的位置数据集。
在 remotecall
中,您可以指定一个 ondata
事件。该事件在 Web
服务返回结果后将被调用。在本例中,您只是将结果写到调试器窗口。这也已经用于填充字段或其他东西。即使写到调试器的这一实现很简单,它仍然很有价值,因
为它是一个强大的工具。有时,Web 服务产生不像 XML 的 XML,最初用于设计用户界面。也很难确定 OpenLaszlo 平台如何解释
XML。这个例子展示了,您如何可以在数据集上调用 serialize
方法,以将 XML 分成良好的 XML 格式。清单 10 是来自 Web 服务调用的例子,这不同于最初用于设计的 XML。
清单 10. 在数据集上调用 serialize 方法以将 XML 分成良好的 XML 格式
<location>
<getBuildingsReturn>
<floors>
<floors>
<name>Floor 1</name>
<id>1</id>
</floors>
<floors>
<name>Floor 2</name>
<id>2</id>
</floors>
</floors>
<name>HQ</name>
<id>1</id>
</getBuildingsReturn>
<getBuildingsReturn>
<floors>
<floors>
<name>Trump 1</name>
<id>1</id>
</floors>
<floors>
<name>Trump 2</name>
<id>2</id>
</floors>
</floors>
<name>Trump Tower</name>
<id>2</id>
</getBuildingsReturn>
</location>
|
注意几件事情。首先,Web 服务不使用任何属性。每个数据项都是一个元素。其次,location
,即数据集的名称,是最外边的 XML 元素。第三,buildings
被 getBuildingsReturn
所取代,后者是用附加到它的单词 Return
所调用的方法的名称。
还有两个其余事件应用于 SOAP 定义而非远程调用。它们是 onload
和 onerror
。onload
只是一个调用方法的方便方式,以便在最初查看页面时填充复选框。当然,要让这件事在查看时立即发生,您还需要在 soap
元素上将 autoload
设置为 true
。在 onload 中,在 WorkOrderService
上显式地调用了 getBuildings()
操作。在 onerror
事件中,只将错误消息写到调试器窗口,以便可以看到错误。
参数化 Web 服务调用
第二个 Web 服务提交一个新的工作单。这里,调用 createWorkOrder
操作。清单 11 是包含在前一节的 WorkOrderService
soap 定义中的定义。
清单 11. 包含在 WorkOrderService soap 定义中的定义
<remotecall name="createWorkOrder" funcname="createWorkOrder">
<param value="${contact.text}" />
<param value="${phone.text}" />
<param value="${email.text}" />
<param value="${description.text}" />
<param value="${bl.text}" />
<param value="${fl.text}" />
<param value="${severity.value}" />
<method event="ondata" args="value">
debug.write('New Work Order ID = ' + value);
</method>
</remotecall>
|
在本例中,您也在 Web 服务类中用等于 WSDL 和方法中的操作名的 name
和 funcname
声明了一个远程调用。因为该操作接受参数,所以您应该包含 param
元素。参数的顺序与 Web 服务类 createWorkOrder()
方法签名相同。这里,值引用 edittext
组件和其他组件中的文本。这个 remotecall
也有一个 ondata
事件,用于将新工作单 ID 的返回值绑定到调试窗口。
警告:OpenLaszlo 要求 Web 服务至少返回一个值。它不能只是返回一个 void,或者所调用的 onerror
事件。
要发起对 createWorkOrder
的调用,请添加一个 onclick
事件到按钮,并在 createWorkOrder
远程调用上调用 invoke
方法:
<button isdefault="true" text="Submit" x="350"
onclick="WorkOrderService.createWorkOrder.invoke()"/>
部署到 Apache Tomcat
在完成 Web 服务和 OpenLaszlo 客户机之后,就应该部署应用程序了。
因为 Web 服务 (fms) 和 OpenLaszlo 客户机 (fm) 的输出都是 .war
文件,所以您应该能够将它们部署在任何兼容的 Web 容器或 J2EE
应用服务器上。因为部署是特定于容器的,所以请参考您的容器文档,了解部署应用程序的指令。Apache Tomcat 是一种流行的 Web
容器,所以本节介绍如何将应用程序部署到这一类型的容器。
要在 Windows 中部署到 Apache Tomcat 服务器,请执行以下步骤:
- 将导出的 fm.war 和 fms.war 文件复制到 <jakarta-tomcat>/webapps 目录。
- 通过执行 <jakarta-tomcat>/bin/startup.bat 脚本启动 Apache Tomcat。
就是这些内容。要测试应用程序,请使用 Web 浏览器导航到 http://localhost:8080/fm/index.lzx。
分享到:
相关推荐
OpenLaszlo —— 一个快速构建和部署富 Internet 应用程序的平台 -- Linux,C,C++,Java,Ajax,XML,perl,php,python,ruby,MySQL,Gnome,KDE,Qt,Gtk,bash,shell,嵌入式,网络,信息安全,操作系统,数据结构,编译原理
关于Winlet是一个Java Web应用程序框架,用于构建由Winlet窗口组成的Rich Internet Applications。 Winlet窗口类似于Web窗口小部件,可以将其添加到任何网页(甚至是其他域中的静态网页),仅占网页的一部分,并使用...
小部件库(移动和桌面)和服务器端组件,用于使用GWT在Java中构建富Internet应用程序。
祝贺您! 祝贺您。您已经创建好了您的第一个 MVC 应用程序。HelloWorld
火龙果软件工程技术中心 本文内容包括:ExtJS概述用ExtJS构建富因特网应用程序用户界面元素ExtJS和Ajax结束语参考资料ExtJS是一种强大的[removed]trade_mark:库,它通过使用可重用的对象和部件简化了...
构建安全的 Microsoft® ASP.NET 应用程序:前言 更新日期: 2004年04月20日 本指南的目标 本指南不是介绍安全性,也不是 Microsoft .NET Framework 的安全性参考材料;如果您要了解这方面的内容,请查看 MSDN 中的...
(Flash,Flex,HTML,JavaScript,Ajax)来构建富Internet 应用程序并部署为桌面应用 程序。 AIR 支持现有的Web 技术如Flash,Flex,HTML,JavaScript 和AJAX,可以用你最熟 练的技术来开发您所见过的最具用户体验...
因为Linux 基于 GPL,所以任何对将 Linux 定制于 PDA、掌上机或者工控设备感兴趣的人都可以从因特网免费下载其内核和应用程序,并开始移植或开发。目前许多优秀的Linux 系统可供用户选择。它们包括 RTLinux、uClinux...
基于Ajax与构件的富客户端的研究和应用,王超群,,传统的基于B/S模式的Web应用程序在易用性和用户交互操作方面存在不足。Rich Internet Applications (RIAs)的出现很好的解决了这两方面的问题。
Amazon DynamoDB:构建NoSQL数据库驱动的应用程序 Amazon DynamoDB是一个键值和文档数据库,可在任何规模上提供单位毫秒的性能。 它是一个完全托管的,多区域,多活动,持久的数据库,具有针对Internet规模应用程序...
1)基本要求: (1)熟悉交换机、路由器等网络设备的功能和使用; (2)掌握网络规划与设计,掌握网络安全与管理技术; (3)初步掌握网络应用程序设计技术和互联网应用技术。
《精通Dojo》详尽阐述了Dojo和Dijit。第一部分展示如何使用...第四部分展示如何构建富因特网应用程序。书中各个部分都提供了真实有效的示例代码,并经过了测试。《精通Dojo》适合具备基本Web编程经验的开发人员阅读。
Adobe Integrated Runtime (AIR) 是一个跨操作系统的运行时,利用现有的Web开发技术(Flash,Flex,HTML,JavaScript,Ajax)来构建富Internet应用程序并部署为桌面应用程序。AIR 支持现有的Web技术如Flash,Flex,HTML,...
【PDF】 <br>地区:大陆 <br>作 者: Alex Homer Dave Sussman <br>出 版 社: 清华大学出版社 <br>本书主要介绍如何使用ASP.NET创建Internet和Intranet中的分布式应用程序,书中提供了各种使用数据...
【PDF】 <br>地区:大陆 <br>作 者: Alex Homer Dave Sussman <br>出 版 社: 清华大学出版社 <br>简介 本书主要介绍如何使用ASP.NET创建Internet和Intranet中的分布式应用程序,书中提供了各种...
火龙果软件工程技术中心 使用AdobeColdFusion8和Flex3构建富Internet应用程序从来没有像现在这么简单。结合使用这些技术,开发人员能够比以前更快地创建具有表现力的应用程序。本文侧重于使用FlexDataGrid创建简单...
学习为企业系统构建数据驱动的Android应用程序 Android设备已经超越消费应用范畴,进入企业领域。如果你准备着手构建与企业系统集成的数据驱动型Android应用程序,那么本书无疑是理想之选。 Android数据库应用编程...
Adobe Integrated Runtime (AIR) 是一个跨操作系统的运行时,利用现有的Web开发技术(Flash,Flex,HTML,JavaScript,Ajax)来构建富Internet应用程序并部署为桌面应用程序。 <br>AIR 支持现有的Web技术如Flash...