Web编程学习四: 使用Jersey来创建RESTful WebService

RESTful Web Service是轻量级的service,可以通过HTTP的方式来实现对后台数据库的CRUD,

在Web开发和移动开发时使用的比较广泛,非常方便。

在Java世界里, JAX-RS规范定义了对RESTful Web Service的实现。

Oracle的Jersey框架则是对JAX-RS的一个实现。

下面我们学习如何使用Jersey来创建RESTful WebService。


我的开发环境:

Eclipse Juno, Java 1.6, Tomcat 7.0, Jersey 1.18


1. 创建第一个RESTful web service

1.1创建一个叫jersey1的Dynamic Web Project.

1.2在WEB-INF/lib文件夹中导入jersey的包。

1.3创建web.xml,定义Jersey的使用。



  sample
  
    Jersey REST Service
    com.sun.jersey.spi.container.servlet.ServletContainer
    
      com.sun.jersey.config.property.packages
      sample
    
    1
  
  
    Jersey REST Service
    /rest/*
  
 


1.4创建Java class


package sample;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

//Sets the path to base URL + /hello
@Path("/hello")
public class Hello {

	// This method is called if TEXT_PLAIN is request
	@GET
	@Produces(MediaType.TEXT_PLAIN)
	public String sayPlainTextHello() {
		return "Hello Jersey";
	}

	// This method is called if XML is request
	@GET
	@Produces(MediaType.TEXT_XML)
	public String sayXMLHello() {
		return "" + " Hello Jersey" + "";
	}

	// This method is called if HTML is request
	@GET
	@Produces(MediaType.TEXT_HTML)
	public String sayHtmlHello() {
		return " " + "" + "Hello Jersey" + ""
				+ "

" + "Hello Jersey" + "

" + " "; } }


1.5.创建测试应用

package sample;

import java.net.URI;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;

public class Test {
	public static void main(String[] args) {
		ClientConfig config = new DefaultClientConfig();
		Client client = Client.create(config);
		WebResource service = client.resource(getBaseURI());
		// Fluent interfaces
		System.out.println(service.path("rest").path("hello")
				.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class)
				.toString());
		// Get plain text
		System.out.println(service.path("rest").path("hello")
				.accept(MediaType.TEXT_PLAIN).get(String.class));
		// Get XML
		System.out.println(service.path("rest").path("hello")
				.accept(MediaType.TEXT_XML).get(String.class));
		// The HTML
		System.out.println(service.path("rest").path("hello")
				.accept(MediaType.TEXT_HTML).get(String.class));

	}

	private static URI getBaseURI() {
		return UriBuilder.fromUri(
				"http://localhost:8080/jersey1").build();
	}

}

1.6. 部署项目到tomcat后,运行Test程序:

Web编程学习四: 使用Jersey来创建RESTful WebService_第1张图片


2.然后来结合JAXB来创建RESTful web service.

JAX-RS可以直接通过JAXB来创建XML和JSON的输出。

JAXB是Java对xml的实现。

2.1 创建叫jersey2的Dynamic Web Project,导入jersey库。

2.2 创建一个对象,这里注意下,加上@XmlRootElement就可以了。

package sample;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

public class Todo {
	private String summary;
	private String description;

	public String getSummary() {
		return summary;
	}

	public void setSummary(String summary) {
		this.summary = summary;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

}


2.3 创建一个class来调用jersey

package sample;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;


@Path("/todo")
public class TodoResource {
	// This method is called if XMLis request
	@GET
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public Todo getXML() {
		Todo todo = new Todo();
		todo.setSummary("This is my first todo");
		todo.setDescription("This is my first todo");
		return todo;
	}

	// This can be used to test the integration with the browser
	@GET
	@Produces({ MediaType.TEXT_XML })
	public Todo getHTML() {
		Todo todo = new Todo();
		todo.setSummary("This is my first todo");
		todo.setDescription("This is my first todo");
		return todo;
	}

}


2.4 web.xml文件



	sample
	
		Jersey REST Service
		com.sun.jersey.spi.container.servlet.ServletContainer
		
			com.sun.jersey.config.property.packages
			sample
		
		1
	
	
		Jersey REST Service
		/rest/*
	
 


2.5 部署项目,然后通过浏览器来测试

输入url: http://localhost:8080/jersey2/rest/todo

可以看到RESTful web service的输出:

Web编程学习四: 使用Jersey来创建RESTful WebService_第2张图片

为了更清楚一点,我用Chrome浏览器的Postman来测试一下,这是一个RESTful的客户端。

Web编程学习四: 使用Jersey来创建RESTful WebService_第3张图片


小结:

可以看到在Java中,可以通过JAX-RS+JAXB非常方便的实现RESTful web service。

直接在对象中定义url以及get,post,put,delete等方法就行了。


你可能感兴趣的:(Java,EE)