Sun正在致力于的建立RESt风格Web服务的规范, 规范如下
JSRs: Java Specification Requests
JSR 311: JAX-RS: The JavaTM API for RESTful Web Services
链接:http://jcp.org/en/jsr/detail?id=311
而同时该规范的参考实现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);
}