WEB开发网
开发学院软件开发Java 结合 Dojo 和 JAX-RS 创建 RESTful 服务 阅读

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

 2010-10-09 08:12:49 来源:WEB开发网   
核心提示: @Path("/filestore")publicclassWorldCupGroup{…}清单3@GET@Path("filelist")@Produces(MediaType.APPLICATION_JSON)//returnsalist

 @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 服务。

上一页  1 2 3 4 

Tags:结合 Dojo JAX

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接