快捷搜索:

构建企业 SOA Ajax 客户端

懂得若何应用 Dojo 对象包为 Java™ Platform Extended Edition (Java EE) 利用法度榜样构建企业 SOA 客户端,以及若何应用 JavaScript Object Notation–RPC (JSON-RPC) 来调用办事器端 Java 工具。

小序

异步 JavaScript 和 XML (Ajax) 是应用本机浏览器技巧构建富 Web 利用法度榜样的新措施。对付编写必要某些类型的“活动”用户界面的繁杂利用法度榜样的开拓职员,JavaScript 在这方面已经做得很好。不过,JavaScript 难于编码、调试、移植和掩护。应用 Ajax 对象包有助于最大年夜程度地削减应用 JavaScript 和 Ajax 带来的许多常见问题。优秀的 Ajax 对象包供给了一组可重用的小部件、用于扩展和创建小部件的框架、事故系统、JavaScript 实用对象和增强的异步办事器调用支持。在本文中,我们将评论争论若何应用 Dojo 对象包为 Java EE 利用法度榜样构建企业 SOA 客户端。我们还将应用 JSON (JavaScript Object Notation)–RPC 来调用办事器端 Java 工具。

在本文中,我们还将向您供给以下内容的简要阐明:Ajax、Dojo、JSON 和 JSON-RPC,以及一些设计 Ajax 利用法度榜样的设计原则和您可以下载并亲身考试测验运行的简短示例。

Ajax 概述

有许多关于 Ajax 的论文、文章和册本。我不盘算对 Ajax 进行深入先容。有关具体信息,请查阅参考资料。

Ajax 可作为应用本机浏览器组件构建网站的体系布局样式。Ajax 的关键部分有:

JavaScript,它可以编排页面元素,从而得到最佳 Ajax 用户体验。

Cascading Style Sheets (CSS),它可以定义页面元素的可视样式。

文档工具模型(Document Object Model,DOM),它将网页布局作为一组可以应用 JavaScript 操作的可编程工具供给。

XMLHttpRequest,它支持今后台活动的形式从 Web 资本检索数据。

XMLHttpRequest 工具是关键部分。

XMLHttpRequest 工具

XMLHttpRequest 工具是 Ajax 用于进行异步哀求的机制。图 1 阐清楚明了该流程:

图 1. XMLHttpRequest 工具进行异步哀求的流程图

XMLHttpRequest 工具是浏览器中供给的 JavaScript 工具。(Microsoft™ 和 Mozilla 浏览器各有自已的版本)。该流程如下所示:

1. 页面调用某个 JavaScript。

2. JavaScript 函数创建 XMLHttpRequest 工具。这包括设置要调用的 URL 和 HTTP 哀求参数。

3. JavaScript 函数注册回调解置惩罚法度榜样。HTTP 相应调用此回调解置惩罚法度榜样。

4. JavaScript 函数调用 XMLHttpRequest 工具上的 send 措施,该措施接着将 HTTP 哀求发送到办事器。

5. XMLHttpRequest 工具急速将节制返回到 JavaScript 措施。此时,用户可以继承应用该页面。

6. 稍后,HTTP 办事器经由过程调用回调解置惩罚法度榜样返回 HTTP 相应。

7. 回调解置惩罚法度榜样可以造访 HTML DOM 工具。它可以动态更新页面元素,而无需中断用户(除非您可巧更新用户正在应用的 DOM 工具)。

经由过程异步更新页面的 DOM,还可以在本地进行异步哀求。

Dojo 对象包概述

Dojo 使您能够方便地构建动态站点。它供给一个富厚的小部件库,您可以应用它组成页面。您可以应用基于 Dojo 方面的事故系统将事故附加到组件,以创建富厚的交互体验。此外,您可以应用几个 Dojo 库进行异步办事器哀求、添加动画效果和浏览存储实用对象等等。

Dojo 小部件

Dojo 供给了您可以用于构建页面的一组富厚的小部件。您可以应用多个措施创建 Dojo 小部件。Dojo 的浩繁优点之一是它容许您应用标准的 HTML 标记。然后,可以将这些标记用于小部件。这样,HTML 开拓职员就可以方便地应用 Dojo,如清单 1 所示:

清单 1. 在 HTML 标记中应用 Dojo

constrainToContainer="true" displayMaximizeAction="true">

Stock Service

Enter symbol:

Get Stock Data

您可以应用 div 标记来定义小部件的位置,而在页面加载或对事故进行响适时 Dojo 可以在这些地方放置小部件。您还可以应用更详细的标记,如,并向此中添加 Dojo 小部件属性。在清单 1 中,我们将 dojoType 属性添加到 button 标记。在设置了标记之后,您必要在一些 JavaScript 内部加载小部件,如清单 2 所示。您可以将标记嵌入到页面内部,然则我们建议将其放置在零丁的 JS 文件中。在本文的稍后部分中,我们将说明一些 MVC 设计原则。

清单 2. 在 HTML 标记中应用 Dojo

//require statements

dojo.require("dojo.widget.*" );

dojo.require("dojo.event.*");

dojo.require("dojo.widget.Button2");

dojo.require("dojo.widget.FloatingPane" );

//all dojo.require above this line

dojo.hostenv.writeIncludes();

dojo.require();

您可以在 JavaScript 中创建、造访、改动和删除小部件,从而实现动态行径。在我们的示例中,您将看到在 JavaScript 中造访小部件的示例。

Dojo 事故系统

Dojo 事故系统应用面向方面的技巧将事故附加到小部件。这可以将小部件与实际的事故处置惩罚分离。Dojo 不是将硬代码 JavaScript 事故添加到 html 标记上,而是供给容许您将事故附加到小部件的 API,如清单 3 所示。

清单 3. 应用 Dojo 将事故处置惩罚法度榜样附加到小部件

function submitStock()

{

...

}

function init()

{

var stockButton = dojo.widget.byId('stockButton');

dojo.event.connect(stockButton, 'onClick', 'submitStock');

}

dojo.addOnLoad(init);

经由过程应用 connect 措施,您可将 JavaScript 措施连接到小部件。您还可以在 div 节点上附加 dojoAttachEvent,如下所示。某些 HTML 标记没有定义事故,以是这是一个方便的扩展。

清单 4. 应用 Dojo 将事故附加到 HTML 标记

dojoAttachEvent="onClick; onMouseOver: onFoo;">

Dojo 事故系统还允许多个高档功能,如:

声明在现有的事故处置惩罚法度榜样之前或之后插入事故处置惩罚法度榜样的建议。

容许小部件在浏览器中订阅或宣布主题。

添加事故回调。

可用于表示事故的 event 规范化工具。

有关具体信息,请拜见 http://dojo.jot.com/EventExamples。

Dojo 异步办事器哀求

Dojo 经由过程抽象特定于浏览器的具体信息,供给了对办事器进行异步哀求的简单措施。Dojo 容许您创建数据布局来暗藏具体信息,如清单 5 所示。

清单 5. 应用 Dojo 进行异步哀求

var bindArgs = {

url:"/DojoJ2EE/MyURI",

mimetype:"text/javascript",

error:function(type, errObj){

// handle error here

},

load:function(type, data, evt){

// handle successful response here

}

};

// dispatch the request

var requestObj = dojo.io.bind(bindArgs);

此外,Dojo 应用 JSON-RPC 标准支持 RPC。在接下来的部分中,我们将看一看 Dojo 对 JSON 的支持。

附加的 Dojo 功能

Dojo 是一个具有许多功能的富厚库,包括:

处置惩罚 html、字符串、样式、dom、正则表达式和多少其他实用对象的通用库。

包括字典、ArraryLists、行列步队、SortedList、设置和客栈的数据布局。

用于添加动画效果、验证、拖放和多少其他功能的可视化 Web 实用对象。

数学和加密库。

存储组件。

XML 解析

有关具体信息,请拜见 http://manual.dojotoolkit.org/index.html。

JSON 概述

JSON 是 JavaScript 的工具翰墨符号的子集,它是在 JavaScript 中表示数据布局的常用措施。JSON 是一种完全与说话无关的文本款式,但应用编程职员认识的与 C 说话家族(包括 C、C++、C#、Java、JavaScript、Perl、Python 和许多其他说话)类似的约定。这些属性使 JSON 成为 Ajax 客户真个抱负数据互换说话。

JSON 构建在两种布局的根基上:

1. 名称/值对的聚拢。在不合的说话中,它被实现为工具、记录、布局、字典、哈希表、有键列表或者关联数组。

2. 值的有序列表。在大年夜多半说话中,它被实现为数组、向量、列表或序列。

JSON 工具的示例如下:

var myJSONObject = {"id": 4, "name": "Roland Barcia", "pets": ["dog","cat","fish"]};

在示例中,我们对值对进行了命名。括号中的任何内容都是一个列表。在不合的编程说话中都有一组富厚的实现。有关具体信息,请拜见 http://json.org/。

JSON-RPC

JSON-RPC 是一种轻量级远程历程调用协议,在此协议中,JSON 可以继续哀乞降相应。向远程办事发送哀求可以调用远程措施。该哀求是具有三个属性的单个工具:

method - 包孕要调用的措施名称的字符串。

params - 作为参数通报到措施的工具数组。

id - 哀求 ID。它可以属于任何类型。它用于将相应与其应答的哀求相匹配。

当措施调用完成时,办事必须对相应进行应答。此相应是具有三个属性的单个工具:

result - 被调用措施返回的工具。它必须为 null,以避免在调用该措施时发生差错。

error - error 工具(假如在调用措施时发生差错)。它必须为 null(假如不存在任何差错)。

id - 它必须是与相应的哀求相同的 ID。

看护是没有相应的特殊哀求。它与带有一个非常的哀求工具具有相同的属性:

id - 必须为 null。

JSON 与 XML

XML 是一种用于面向办事的体系布局 (SOA) 和数据传输的常见传输。当然,今朝许多办事以 SOAP 款式存在。不过,何时将其用于数据传输在 Ajax 社区中存在分岐。JSON 有以下几个优点:

浏览器解析 JSON 的速率比 XML 快。

JSON 构造是友好的编程说话,并轻易转换为后端编程说话(如 Java)。

JSON 相称稳定。JSON 的附加内容将成为超集。

XML 有以下优点:

调用将 XML 用作传输的现有办事。

应用 XSLT 可以动态转换 XML。这是企业办事总线 (ESB) 规划中的抱负功能。

用于 Dojo 的 JSON-RPC

Dojo 为调用 JSON-RPC 哀求供给了抽象层。用于 Dojo 的 JSON-RPC 引入了标准措施描述(Standard Method Description,SMD)的观点。SMD 文件是 JSON-RPC 办事的描述。它容许您以中立要领描述 JSON 调用。清单 6 供给了此类 JSON 调用的示例:

清单 6. Dojo 中的 SON 调用

{"SMDVersion":".1",

"objectName":"StockService",

"serviceType":"JSON-RPC",

"serviceURL":"/DojoJ2EE/JSON-RPC",

"methods":[

{"name":"getStockData",

"parameters":[

{"name":"symbol",

"type":"STRING"}

]

}

]

}

您可以应用 Dojo API 调用办事:

var StockService = new dojo.rpc.JsonService("/path/to/StockService.smd"); StockService.getStockData("IBM",stockResultCallback);

这将经由过程收集发送此布局:

{"id": 2, "method": "getStockData", "params": ["IBM"]}

JSON-RPC Java ORB

JSON-RPC 为远程历程调用定义标准款式,然则不存在对后端技巧的标准映射。JSON-RPC Java Orb 供给了这样一种机制:注册 Java 工具,并将它们公开为 JSON-PRC 办事。它还在 JavaScript 中供给客户端 API,以调用办事。

假如您选择应用 Dojo,则可以编写自已的绑定代码。用于 Java 的 JSON API 可以供给赞助。有关具体信息,请拜见 (http://developer.berlios.de/projects/jsontools/)。在我们的示例中,我们将应用 JSON-RPC Java ORB 进行异步哀求,以使用办事器端绑定代码。

JSON-RPC Java Orb 容许您在一种 Servlet 范围(哀求、会话、利用法度榜样)内注册 Java 工具。然后,它可以应用 JSON-RPC 哀求来调用 Java 工具。为此,可以将工具类型放在 JSON 工具之前。因为 Dojo API 不履行此操作,以是用于 JSON-RPC 的 Dojo 客户端 API 与用于 Java 的 JSON-RPC 不兼容。

清单 7 供给了若何向 HttpSession 注册 Java 工具的示例:

清单 7. 注册 Java 工具的 HttpSession

HttpSession session = sessionEvent.getSession();

JSONRPCBridge json_bridge = null;

json_bridge = (JSONRPCBridge) session.getAttribute("JSONRPCBridge");

if(json_bridge == null) {

json_bridge = new JSONRPCBridge();

session.setAttribute("JSONRPCBridge", json_bridge);

}

json_bridge.registerObject

("StockService",StockServiceImpl.getStockService());

您可以在 Servlet 或 HttpListener 中履行此操作。然后将 JavaScript 客户端写入到 Java 办事,如清单 8 所示。

清单 8. 连接 Java 办事的 JSONRpcClient

jsonrpc = new JSONRpcClient("/DojoJ2EE/JSON-RPC");

var stockButton = dojo.byId('stockInput');

jsonrpc.StockService.getStockData(stockResultCallBack,stockButton.value);

此哀求会发送以下有效负载:

{"id": 2, "method": "StockService.getStockData", "params": ["IBM"]}

相应与以下所示类似:

{"result":{"javaClass":"com.ibm.issw.json.service.StockData","price":100, "companyName":"International Business Machine","symbol":"IBM"},"id":2}

用于 Java 客户真个 JSON-RPC 将处置惩罚此相应,并向您供给一个静态接口。

为了支持哀求,您必要注册特殊的 Servlet。稍后,我将向您先容若何履行此操作。

JSON-RPC Java ORB 的一个毛病是只有单个 URL,这导致应用 Java EE 安然来保护 URL 异常艰苦。作为一种变通措施,您可以在 HTTP 会话层注册办事,并根据安然必要添加它们。

为企业利用法度榜样构建企业客户端

在此部分中,我将评论争论一些设计原则,然后具体解说一个示例。您可以下载完备的 WAR 文件,并亲身考试测验该利用法度榜样。

模型-视图-节制器

在 Java EE 领域中,模型-视图-节制器 (MVC) 已经变得异常成熟,这归功于 Struts 和 JavaServer Faces 之类的框架。应用 Ajax 可以进行精确的 MVC 设计,这对成功的 Web 利用法度榜样至关紧张。此外,SOA 容许直接从 Ajax 利用法度榜样调用办事。这样做有几个优点,如 WebSphere 期刊文章 "AJAX Requests – Data or Markup?" 中所述。

您可能还会对下面的文章感兴趣: