Bootstrap

Jersey : Java规范下REST风格Web Service开发框架

Sun正在致力于的建立RESt风格Web服务的规范,  规范如下  

JSRs: Java Specification Requests
JSR 311: JAX-RS: The Java TM API for RESTful Web Services
而同时该规范的参考实现Jersery也在逐渐成熟,目前已经是0.7版,大家可以参考 https://jersey.dev.java.net/
从JAX-RS规范和Jersey的发展,以及WADL的定义可以看到Sun在RESTful Web Service上面的功夫,也可以预见,不就的将来,Java规范的REST风格Web Service将成为主流(起码是Java界的主流),同时Yahoo、Amazon、Google等对REST风格Web Service的青睐,也说明了RESt风格Web Service的发展和前途。
言归正传,介绍Jersey,一个REST风格服务的开发框架。
Jersey是JAX-RS的参考实现,现在已经是0.7版,然而并不是最终版本,因为JAX-RS还没有到最终版本。但是现在的Jersey已经足以让Java爱好者一饱coding福了。首先,Jersey采用了Annotation机制,所有的HTTP相关的参数设置都采用标注实现,因此,在编程的时候,我们好像针对的仍然是POJO,体会不到分布式或J2EE编程的痛苦,只要了解一些关键Annotation的用户即可。其次,Jersey是一个开发的平台,我们可以扩展自己的需求,比如在消息格式上,虽然Jersey已经提供了Java基本数据类型、JSON、XML等类型,我们还是可以很容易的扩展自己的格式。第三,Jersey建立的服务可以很简单的部署到JDK6自带的轻量级Server上,过程极其简单(见下面例子)。第四,Jersey建立的服务可以非常容易的部署为Servlet,支持各种J2EE容器。第五,Jersey可以为我们编写的服务自动生成WADL(参见 http://research.sun.com/techrep/2006/abstract-153.html)。除此之外,Jersey还有许多的优点等待代价去发现。
好,让我们先来个例子,先睹为快吧。
以下Students类建立了一个Students的资源,其中主要是学生的姓名和年龄信息,采用学生名作为定位资源的URI,将给出学生的详细信息(姓名、年龄)。而Server类则扮演了服务器的角色,采用了JDK6自带的轻量级Server,其实只需要两行代码就可以建立并启动该Server,这个就自己看下面的代码吧。
import java.util.HashMap;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.ProduceMime;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import com.sun.ws.rest.spi.resource.Singleton;
/**
 *
 * @author dongtg
 *
 */
@Singleton
@Path("student/{name}")
public class Students {
 
 HashMap<String,Integer> nameage=new HashMap<String,Integer>();
 //String name;
 int age=20;
 
 public Students()
 {
  nameage.put("aaa",20);
  nameage.put("bbb",30);
 }
 
    @GET
    @ProduceMime("text/plain")
    public String getInfo(@PathParam("name")String name)
    {
 
     return "name is "+name+"; age is "+nameage.get(name;
    }
}

 

import java.io.IOException;

import com.sun.net.httpserver.HttpServer;
import com.sun.ws.rest.api.container.httpserver.HttpServerFactory;
/**
 *
 * @author dongtg
 *
 */
public class Server {

    public static void main(String[] args) throws IOException {
         HttpServer server = HttpServerFactory.create("http://localhost:9998/");
         server.start();
        
         System.out.println("Server running");
         System.out.println("Visit: http://localhost:9998/student");
         System.out.println("Hit return to stop...");
         System.in.read();
         System.out.println("Stopping server");  
         server.stop(0);
         System.out.println("Server stopped");
     }   
}

;