结合 Dojo 和 JAX-RS 创建 RESTful 服务
2010-10-09 08:12:49 来源:WEB开发网 @Path("/filestore")
public class WorldCupGroup { … }
清单 3
@GET
@Path("filelist")
@Produces(MediaType.APPLICATION_JSON)
// returns a list of files in JSON format that match the request
public JSONObject getFileList(@QueryParam("path") String path) {
在这个例子中,@Path 值与 URI 路径有关。例如,在 RESTful 服务请求(在清单 3 中定义的)/rest/filestore/filelist,/filestore/ 表示到 RESTful 服务的 PATH URI。
清单 3 中定义了您的 RESTful 服务调用的方法。@GET 定义了 HTTP GET 方法,@PATH 进一步细化 URI 使其更具体;在此例中是 /rest/filestore/filelist。@Produces 定义了将要返回的 MIME 媒体类型:在本例中,该方法返回转换成一个 MIME 类型的应用程序 /json 的 JSON 数据,这就是 Dojo 的 dojo.data.FileStore 所预期的。@QueryParam 是 JAX-RS 用来通知要传递给 getFileList 方法的查询参数值。例如,在清单 4 中的 HTTP GET 请求中,@QueryParam (“path”) 值是 C://artifactstore//FIFA World Cup Group。
清单 4
GET http://localhost:8080/rest/filestore/filelist?path=C://artifactstore//FIFA World
Cup Group
代码的另一部分包含构造描述文件系统的 JSON 数据流的信息。例如,createFileItem 方法从文件系统中读取信息,然后构造一个稍后返回 dojox.data.FileStore 的 JSON 对象。清单 5 显示了完整的服务器端实现代码。
清单 5
package com.example.filestore;
import java.io.File;
import java.io.IOException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import com.ibm.json.java.JSONArray;
import com.ibm.json.java.JSONObject;
@Path("/filestore")
public class FIFAWorldCup {
public static final String ROOT_DIR = "C:\\artifactstore\\";
// returns a list of files in JSON format that match the request
@GET
@Path("filelist")
@Produces(MediaType.APPLICATION_JSON)
public JSONObject getFileList(@QueryParam("path") String path) {
JSONObject ret = new JSONObject();
JSONArray filelist = new JSONArray();
JSONObject items = new JSONObject();
if (path == null) {
path=this.ROOT_DIR;
}
/** Method to construct a JSONObject representing the File
* as a DataStore item.
*
* @param file The file contained within rootDir to reference.
*
* @return JSONObject of the file, or null if file was null or not
* contained within the root path of the FileStore.
*/
private JSONObject createFileItem(String parent,File file) throws
IOException {
JSONObject item = new JSONObject();
if (parent != null && file != null) {
String filePath = file.getAbsolutePath();
//Make sure the request is contained within the root directory
if (filePath.startsWith(this.ROOT_DIR)){
item.put("name", file.getName());
item.put("modified", new Long(file.lastModified()));
item.put("size", new Long(file.length()));
item.put("path", filePath);
item.put("directory", new Boolean(file.isDirectory()));
// if this is a directory, then add the children
if (file.isDirectory()) {
File[] child = file.listFiles();
JSONArray children = new JSONArray();
if (child.length > 0) {
for (int j = 0; j < child.length; j++) {
children.add(child[j].getName());
item.put("children", children);
}
}
else {
// since this directory has no children, place an empty child
item.put("children",children);
}
}
}
}
return item;
}
} // end of class definition
结束语
最新版本的 IBM WebSphere Application Server Feature Pack for Web 2.0 提供了创建端到端的 RESTful 服务所需的库。在客户端,您有一个由 Dojo 组成的功能强大的开源 JavaScript 工具箱。对于服务器端实现,您有基于 Apache Wink 项目的 JAX-RS 库。文中给出的代码表示一个简单样例后端实现 dojox.data.FileStore。此外,协议实现可以被添加,例如查询和对于您的数据可能是惟一的用户定义选项。参考下面的参考资料,获取一个有用的链接列表,帮助您以自己的方式使用 Dojo 和 JAX-RS 来创建 RESTful 服务。
- ››结合照片打造时尚炫酷的草图效果
- ››结合 Dojo 和 JAX-RS 创建 RESTful 服务
- ››Dojo QuickStart 快速入门教程 (4) 简单的测试框架...
- ››Dojo QuickStart 快速入门教程 (5) 使用数组
- ››Dojo QuickStart Guide 快速入门 Why Dojo
- ››Dojo Quick Start Guide 快速入门 (2) 基本框架
- ››Dojo QuickStart 快速入门教程 (3) 选择器
- ››Dojo Javascript 编程规范 [1]
- ››Dojo Javascript 编程规范 [2]
- ››Dojo Javascript 编程规范 [3]
- ››Dojo Javascript 编程规范 [4]
- ››Dojo Javascript 编程规范 [5]
更多精彩
赞助商链接