首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

结合 Dojo 和 JAX-RS 创建 RESTful 服务(1)

结合 Dojo 和 JAX-RS 创建 RESTful 服务(1)

在客户端和服务器端的简易实现最新版本的 IBM® WebSphere® Application Server Feature Pack for Web 2.0,为您创建 Ajax 样式架构提供一个端到端的解决方案。在客户端,功能部件包提供开源 Dojo JavaScript 工具箱。在最新版的功能部件包中 JAX-RS (基于 Apache Wink 项目)提供服务器端库,可用来实现连接 Dojo 的 RESTful 服务。
除了广泛的用户界面小部件外,Dojo 还提供了丰富的数据服务 API,可轻松地连接服务器端 Web 服务。Dojo 数据 API 从显示用户界面的小部件中抽象出惟一数据格式概念。Dojo 数据提供基本数据存储用来读取 JSON 数据,还有一些其他的格式,例如 XMLStore、CsvStore 等等。如果您使用 Dojo 的树型小部件,那么您就可以选择您想要使用的数据存储,并且数据存储负责树型小部件数据处理服务。
Dojo 的数据存储很容易连接到 RESTful 服务,RESTful 服务中引入 JAX-RS。JAX-RS 的 Apache Wink 实现使创建您自己定制的 Web 服务变得很容易。因此如果您想,也就是说使用 Dojo 的树型小部件来描述文件系统的表示形式,那您需要实现协议 Dojo 用法来描述文件系统的表示形式。Dojo 为您提供客户端服务时,您也需要写入服务器端实现中。JAX-RS 有助于服务器实现变得简单易懂。
一个示例让我们用一个示例来说明。图 1 展示了客户端和服务器端的交互。在这个例子中,您可以以目录格式显示初始 FIFA World Cup Soccer 球队。您可以在服务器端采用目录结构,在客户端创建一个树型表示。在左边,diji.Tree 是用来显示包含在服务器中的目录信息的 Dojo UI 小部件。Dijit.Tree 依赖 dijt.tree.ForestStoreModel 和 dojox.data.FileStore。dijit.tree.ForestStoreModel 是从 dojox.data.FileStore 返回的数据之间的一个映射层。ForestStoreModel 负责创建一个含有目录清单虚拟根节点的 “Files”,并负责将所有内容放入根节点下。dojox.data.FileStore 负责打开服务器端的采用 JAX-RS 实现的 RESTful 服务连接。
服务器端运行一个 RESTful 服务,实现 rest/filestore/filelist 请求。JAX-RS 服务从 dojox.data.FilesStore 读取 HTTP GET 请求并将数据以 JSON 格式返回 dojo.data.FileStore。数据返回的格式是 JSON,dojox.data.FileStore 支持此格式。
图 1. 服务器端和客户端的 RESTful 交互 我们来看看服务器端返回的 JSON 数据属性。在图 1 中,服务器返回的 JSON 数据格式如下:
  • path 表示当前路径。
  • modified 含有关于何时进行最后一次目录修改的数据。
  • size 表示文件系统上目录的大小。
  • name 是显示的目录名。
  • children 是一个 JSON 阵列,还有当前目录的子目录名。
值得一提的是在这个实例中使用了一个惰性加载模型。惰性加载意味着只有用户目前正在导航的目录被返回。惰性加载是更高效的,因为您只请求需要被显示的数据。
客户端实现进一步了解这个实现设计,清单 1 显示了一个使用 Dojo 的 HTML 页面的部分客户端代码清单。这段代码使用了 3 个 Dojo 提供的 JavaScript 类:dijit.Tree、dijit.tree.ForestStoreModel 和 dojox.data.FileStore。
清单 1
1
2
3
4
5
6
7
8
9
<body class="soria">
  <div dojoType="dojox.data.FileStore" jsId="countryStore"  
       url="rest/filestore/filelist" pathAsQueryParam="true"></div>
  <div dojoType="dijit.tree.ForestStoreModel" jsId="countryModel"   
       store="countryStore" rootId="myfiles" rootLabel="Files"
       childrenAttrs="children">
  </div>
  <div dojoType="dijit.Tree" id="mytree" model="countryModel" ></div>
  </body>




上述代码中,dojox.data.FileStore 提供了一个从文件系统中读取文件信息的轻量级 JavaScript 实现。该实现提供一些信息,例如文件大小、最后一次修改数据,如果输入是一个目录,那么还有其子目录。dojox.data.FileStore 的 URL 参数是其余服务的位置。pathAsQueryParam 参数使您既可以提供一个含有文件或目录路径的 URL 查询参数,也可以包含路径作为 URL 请求的一部分(如果这个值被设为 false)。
清单 1 中的 dijit.tree.ForestStoreModel 将一个根节点和 diji.tree 中的多个根条目连接起来。例如, dijit.tree.ForestStoreModel 使您可以在另一个根节点 “Files” 中显示目录,如图 1 所示。dijit.tree.ForrestStoreModel 提供参数来设置 rootId,可用来查询您 JavaScript 代码中的根节点。此外,rootLabel 可以设置成包含应该被显示的文本标签。childrenAttrs 参数指定应该被命名的子条目属性。如果您从图 1 中重新调用,JSON 数据包含一个子条目阵列。childrenAttrs 参数给您提供如何命名属性的灵活性。
最后,dijit.Tree 是将要显示树的 UI 小部件。这个参数包括模型名以及树的 JavaScript ID。
返回列表