正 文

AJAX及使用E4X编写Web服务脚本(二)


www.7dspace.com  更新日期:2005-10-13 1:12:16  七度空间


  本文(由两部分组成的文章中的第二部分)中,我们将对 E4X 做更深层次的介绍。E4X(ECMAScript for XML) 是 JavaScript 的简单扩展,它使得在 JavaScript 中使用 XML 的脚本更简单易用。在本文章第一部分中,我们展示了一个名为 AJAX(异步 JavaScript 及 XML,Asynchronous JavaScript and XML)的 Web 编程模型,并且也展示了一些新的 JavaScript 的 XML 扩展是如何使其变得非常简单的。在本文章的第二部分中,我们将用 E4X 构建该交互过程中的服务器端,我们也会介绍如何用 JavaScript 来实现简单的 Web 服务。

  本文将介绍在 Axis 中使用一个 E4XProvider 情况下,E4X 脚本是怎样用来实现 Web 服务的。

  用 E4X 提供 Web 服务

  我们已经成功的使用 E4X 调用 Web 服务,现在我们要用 E4X 提供 Web 服务。很多 Web 服务工具包使用这样的一种方法——就是把 XML 映射成本机语言的结构或者相反。例如 JAX-RPC(针对基于 XML 的 RPC 的 Java API)定义了如何将已存在的 Java 方法映射成可访问 SOAP 的服务。 鉴于这篇文章的写作目的,我们将使用一种截然不同的方法。我们通过提供接受 XML 文档作为参数的方法来提供 Web 服务。在这个模型中,Web 服务就是一个简单的接收 XML 文档并返回 XML 文档的函数。

  根据对 SOAP 解析程度的需要,我们有两种不同的签名。第一种签名方式与之前编写的客户端程序非常相像,我们只要编写以下程序:

function service(soapEnvelope) {
   // do things
   return newSoapEnvelope;
}

  这个模型依赖于可以完整解析和管理整个 SOAPEnvelope 的编码器。而更一般的情况是,我们希望使用一种稍微不同的模型,就是把对 SOAPEnvelope 的处理一分为二。在该模型中,一系列的“headler”用于处理 SOAP 消息头部,而“业务逻辑”处理消息主体。两种模型都有自身的优缺点,由于在 E4X 中拥有强大而易用的 XML 处理能力,因此我们可以轻松地使用这两种模型。

  只含有消息体的签名看起来很类似:

function service(soapBody) {
   // do things
   return newSoapBody;
}

  我们将如何部署符合这个模型的服务?为了实现这一目的,我们在这篇文章中的例子里 提供了一种“宿主”技术——Apache Axis 提供者。提供者是这样一种方式:Axis 允许可插拔地插入新的服务提供者程序,而 E4X 提供者允许用户使用 E4X 脚本实现服务。

  事实上,我们还有另外两种选择没有提到。第一种是在 J2EE 应用服务器中将 Rhino 和 E4X 插入到使用 JAX-RPC 和企业 Web 服务(EWS,也称作 JSR109)技术中。然而,这实际上有一定的困难,因为这些标准对于请求者与提供者采用标准的方法去访问整个 SOAP 包时并不容易。

  总的来说,一个 Web 服务的容器(正如 Axis 或者一个实现 EWS 的 J2EE 服务器)为我们做了两件事。首先,这些容器具有工具与运行时环境支持使得在网络中传递的 XML 消息被映射成运行时系统中程序员所使用的对象。其次,他们通常为附加的 Web 服务标准提供支持,比如 Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)和在消息中加入新的报头并且转换的 WS 事务(WS-Transactions),比如通过加密 XML 消息。我们这里所采用的方法将去除了在第一个方面的需要,因为这时我们已经将 XML 作为一个直接使用的本机对象,而不用再次的映射操作。

  当然,可能的情况下在 E4X 中使用 Web 服务安全,可能不是那么有趣(我们还没有试过!)。所以将 E4X 嵌入到一个 Web 服务容器中非常有利。另一方面,如果您在实现一个非常简单的 Web 服务(比如没有 Web 服务 安全的考虑),您根本不需要一个 Web 服务容器。所以第三种选择就是将 Rhino/E4X 部署为一个 servlet 容器中的 servlet。如果您只是做简单的报头支持,比如说 Web 服务寻址,您可以在 E4X 中处理,实际上这个实现起来非常简单。

  尽管在这篇文章中包括了 E4XServlet 和一个可以在下载中找到的样本压缩包的例子,但是我们着重介绍使用 Axis。

  Axis 提供了一个非常简单的方法:通过将 JAR 文件加入到类路径环境变量中就可以加入新的提供者。为了实现这个方法,您需要 Axis 1.2 或者更高的版本。您可以从 Apache AXIS Web 服务引擎中下载。由于 Axis 之前发布的版本在保存脚本方面存在问题,所以我们推荐使用上面提到的版本。(如果遇到了类似服务器重新启动之后脚本不能工作的情况,可能是您使用的版本有这个缺陷,请使用新版本的 Axis 再次重新部署。)

5页,页码:[1] [2] [3] [4] [5] 

上一篇:AJAX及使用E4X编写Web服务脚本(一)
下一篇:IP地址盗用常用方法及防范
作者:Paul Fremantle  来源:IBM ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐