本文主要介紹如何用Jsersy實現RESTful服務。在介紹Jsersy以前,先介紹一下Rest和Restful的概念。 html
REST 中最重要的概念是資源(resources),使用全球 ID(一般使用 URI)標識。客戶端應用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操做資源或資源集。RESTful Web 服務是使用 HTTP 和 REST 原理實現的 Web 服務。一般,RESTful Web 服務應該定義如下方面: java
首先你們要明確,REST不是一種技術標準,REST是一種架構風格,而RESTful是基於REST原理實現的一種Web服務。 web
Jsersy是Java的REST架構風格實現RESTful Web服務開源框架,在Java世界裏,通常都有一個標準,關於REST規範叫JAX-RS(即: JSR-311),該標準於2007提出,在JAX-RS標準提出以前,JAVA有restlet和resteasy之類的框架,隨着REST架構設計風格普遍流行,支持REST風格的RESTful服務框架愈來愈多,如Spring MVC,Axis2等等。 apache
最新版Jsersy有如下幾部分構成: json
每一個模塊下又分給很小模塊,在這就不一一介紹,你們能夠參考Jsersy幫助文 檔:https://jersey.java.net/documentation/latest/modules-and-dependencies.html#modules api
在Eclipse中,建立一個新項目,採用Maven管理項目,pom.xml配置以下: 瀏覽器
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.opensv</groupId><artifactId>rest-example</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>rest-example Jersey Webapp</name><build><finalName>rest-example</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><inherited>true</inherited><configuration><source>1.6</source><target>1.6</target></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>9090</port><path>/rest</path><uriEncoding>UTF-8</uriEncoding><finalName>rest</finalName><server>tomcat7</server></configuration></plugin></plugins></build><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version><scope>test</scope></dependency><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-client</artifactId><version>2.0-m13</version></dependency><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-common</artifactId><version>2.0-m13</version></dependency><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-server</artifactId><version>2.0-m13</version></dependency><dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet</artifactId><version>2.0-m13</version></dependency><dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-json-jackson</artifactId><version>2.0-m13</version></dependency><dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-sse</artifactId><version>2.0-m13</version></dependency><dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-multipart</artifactId><version>2.0-m13</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.2</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.2</version></dependency></dependencies><properties><jersey-version>1.17.1</jersey-version></properties><repositories><repository><id>glassfish.java.net</id><name>GlassFish Maven Repository</name><url>http://download.java.net/maven/glassfish</url><layout>default</layout></repository><repository><id>m2.java.net</id><name>Java.net Maven 2 Repository</name><url>http://download.java.net/maven/2</url><layout>default</layout></repository></repositories><pluginRepositories><pluginRepository><id>m2.java.net</id><name>Java.net Maven 2 Repository</name><url>http://download.java.net/maven/2</url><layout>default</layout></pluginRepository></pluginRepositories></project>
在本例中,使用tomcat 做爲運行容器,所以,須要在pom.xml添加Tomcat插件。具體Tomcat插件如何使用,見我另外一篇博文,http://my.oschina.net/lilw/blog/168667。 tomcat
<?xml version="1.0" encoding="UTF-8"?><!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e194 --><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!--配置Jsersy Servlet-->
<servlet><servlet-name>jersey</servlet-name><!--注意:若是Servlet是2.0-->
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class><!--配置應用類-->
<init-param><param-name>javax.ws.rs.Application</param-name><param-value>cn.opensv.rest.api.ExampleApplication</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!--配置Servlet映射-->
<servlet-mapping><servlet-name>jersey</servlet-name><url-pattern>/*</url-pattern></servlet-mapping></web-app>
本文先用最單的配置方式,具體更高級應用,在後續文章中會陸續介紹。 架構
package cn.opensv.rest.api;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
//資源類
@Path("api/example01")
public class Example01 {@GET@Produces("text/plain")
public String get() {
return "I am get Method!";}@PUT@Produces("text/plain")
public String put() {
return "I am put Method!";}@POST@Produces("text/plain")
public String post() {
return "I am post Method!";}@DELETE@Produces("text/plain")
public String delete() {
return "I am delete Method!";}}
@Path 調用資源服務的路徑,即REST的URI。 app
@GET http 的GET請求 GET請求是獲取/列出/檢索單個資源或資源集合。
@PUT http 的PUT請求 PUT請求是更新現有資源或資源集合。
@POST http的POST請求 POST請求是新建資源。
@DELETE http的DELETE請求 DELETE請求是刪除資源或資源集合。
@Produces 是每次請求返回的HTTP內容的類型。
這樣基本搞掂一個簡單的RESTful服務。
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
/**
* 建立應用類
* @author liliangwen
*
*/
@ApplicationPath("/")
public class ExampleApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<Class<?>>();
//註冊資源類
classes.add(Example01.class);
return classes;
}
}
在應用類中註冊資源類,並把應用類配置到Web.xml中。
本文先簡單介紹一個測試工具,能夠藉助Chrome瀏覽器的插件進行的REST服務測試。插件名稱:Chrome Poster。
在URL框中輸入訪問資源URL,分別點擊GET,POST,PUT,DELETE按鈕會調用不一樣的資源服務。
固然若是對Linux 的Curl命令熟悉,也能夠用該命令進行測試。
注意:本實驗運行環境:tomcat 7.0。