将 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,嵌入式,网络,信息安全,操作系统,数据结构,编译原理
5. 创建AIR应用程序:这部分涉及实际动手创建AIR应用程序。可以使用多种方法和工具来创建,比如在Flash Builder中使用Flex框架创建桌面应用,使用Flash Professional创建动画,或者用Dreamweaver结合...
它的IIS(Internet Information Services)Web服务器组件,是构建Web应用程序的关键工具。IIS支持多种Web技术,如ASP.NET、PHP和FTP服务,为开发者提供了丰富的功能和灵活性。 在构建可靠Web应用程序时,首先需要...
富应用程序编程,也称为 Rich Internet Application (RIA),是一种在互联网上提供类似桌面应用程序用户体验的技术。随着互联网技术的发展,用户对于在线应用的期望不断提高,而RIA技术正是为了满足这种需求而诞生的...
在此背景下,富因特网应用程序(Rich Internet Applications, RIA)的概念应运而生,它旨在结合桌面应用程序的高性能和互动性与网络应用程序的广泛传播范围和便捷性。 #### 二、富因特网应用程序的优势 ##### 传播...
FLEX作为一款由Adobe公司推出的开源框架,以其强大的图形渲染能力和高度互动性的特点,在构建富互联网应用(Rich Internet Applications, RIA)方面展现出巨大潜力。 #### 二、FLEX技术概述 FLEX技术的核心在于...
关于Winlet是一个Java Web应用程序框架,用于构建由Winlet窗口组成的Rich Internet Applications。 Winlet窗口类似于Web窗口小部件,可以将其添加到任何网页(甚至是其他域中的静态网页),仅占网页的一部分,并使用...
VB构建INTERNET应用知识点 一、 Internet 技术概述 * Internet 技术是基于 TCP/IP 协议的全球性非集中管理的计算机网络 * Internet 技术为开发人员提供了广泛的施展空间 二、 VB 构建 INTERNET 应用 * 使用 ...
AppKitGWT是一款强大的开发工具,专为使用Google Web Toolkit (GWT) 构建富互联网应用程序(RIA)而设计。GWT是一个开源框架,允许开发者使用Java语言编写客户端代码,然后编译成高效的JavaScript,使得应用程序可以在...
Flex的核心优势在于其强大的组件库和数据绑定能力,使得开发者能够轻松地构建出功能丰富、视觉效果出众的Web和桌面应用程序。 #### 二、Flex与Adobe Flash Platform Flex是Adobe Flash Platform的重要组成部分之一...
2. **XAML 浏览器应用程序 (Xbap)**:一种特殊的基于Web的应用程序,其主要组成元素为XAML页面,可以在Web浏览器(例如Internet Explorer和Firefox)中运行。 3. **自定义控件库**:非可执行程序集,包含了一系列可...
### 构建安全的Microsoft® ASP.NET应用程序 #### 指南概述 本指南旨在为开发者提供关于构建安全Microsoft ASP.NET应用程序的专业建议和技术指导。它不仅涵盖了基础的安全性概念,还深入探讨了如何在分布式环境中...
### 使用VB构建Internet应用 在信息技术领域,利用Visual Basic(简称VB)开发Internet应用程序是一种非常实用且高效的方法。本文将详细介绍如何使用VB构建Internet应用,包括相关知识点、技术要点及其实现过程。 ...
在Oracle数据库上构建JAVA应用程序,首先需要了解JDBC驱动程序的相关知识。JDBC(Java Database Connectivity)是一种Java语言中用于执行SQL语句的API,而JDBCDriver是JDBC的一部分,提供了一种标准的方法,使得Java...
### 集成Flex, Spring, Hibernate 构建应用程序 #### 概述 随着互联网技术的不断进步,富互联网应用(Rich Internet Application, RIA)因其出色的表现力和用户体验成为了现代Web开发的重要趋势之一。Adobe Flex ...
构建安全的 Microsoft® ASP.NET 应用程序:前言 更新日期: 2004年04月20日 本指南的目标 本指南不是介绍安全性,也不是 Microsoft .NET Framework 的安全性参考材料;如果您要了解这方面的内容,请查看 MSDN 中的...
C# Web应用程序是基于.NET框架开发的Web应用,它利用ASP.NET技术来构建动态网站、Web服务和富交互式Web应用程序。本教程将带你走进C# Web开发的世界,通过深入理解C#语言基础和ASP.NET核心概念,你将能够创建功能...