基於jersey和Apache Tomcat構建Restful Web服務(一)

基於jersey和Apache Tomcat構建Restful Web服務(一)html

  現現在,RESTful架構已然成爲了最流行的一種互聯網軟件架構,它結構清晰、符合標準、易於理解、擴展方便,因此獲得愈來愈多網站的採用。那麼問題來了,它是什麼呢?java

起源 web

  REST(Representational state transfer)在 2000 年由 Roy Fielding 在博士論文中提出,他是 HTTP 規範 1.0 和 1.1 版的首席做者之一。瀏覽器

  REST 中最重要的概念是資源(resources,使用全球 ID(一般使用 URI)標識。客戶端應用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操做資源或資源集。RESTful Web 服務是使用 HTTP 和 REST 原理實現的 Web 服務。一般,RESTful Web 服務應該定義如下方面:tomcat

  • Web 服務的基/根 URI,好比 http://host/<appcontext>/resources。
  • 支持 MIME 類型的響應數據,包括 JSON/XML/ATOM 等等。
  • 服務支持的操做集合(例如 POST、GET、PUT 或 DELETE)。

  表 1 演示了典型 RESTful Web 服務中使用的資源 URI 和 HTTP 方法。(參考資料 提供了有關 RESTful Web 服務的更多介紹和設計考慮事項。)服務器

  表 1. RESTful Web 服務示例架構

方法/資源app

資源集合, URI 如:
http://host/<appctx>/resources
框架

成員資源,URI 如:
http://host/<appctx>/resources/1234
jsp

GET

列出資源集合的全部成員。

檢索標識爲 1234 的資源的表示形式。

PUT

使用一個集合更新(替換)另外一個集合。

更新標記爲 1234 的數字資源。

POST

在集合中建立數字資源,其 ID 是自動分配的。

在下面建立一個子資源。

DELETE

刪除整個資源集合。

刪除標記爲 1234 的數字資源。

  那麼又如何來構建Restful web服務呢?本文介紹一個簡單易學的構建Restful web服務的方法,便是使用Jersey構建Restful web服務。

JSR 311 (JAX-RS) 和 Jersey 

  JSR 311 或 JAX-RS(用於 RESTful Web Services 的 Java API)的提議開始於 2007 年,1.0 版本到 2008 年 10 月定稿。目前,JSR 311 版本 1.1 還處於草案階段。該 JSR 的目的是提供一組 API 以簡化 REST 樣式的 Web 服務的開發。

  在 JAX-RS 規範以前,已經有 Restlet 和 RestEasy 之類的框架,能夠幫助您實現 RESTful Web 服務,可是它們不夠直觀。Jersey 是 JAX-RS 的參考實現,它包含三個主要部分。

  • 核心服務器(Core Server):經過提供 JSR 311 中標準化的註釋和 API 標準化,您能夠用直觀的方式開發 RESTful Web 服務。
  • 核心客戶端(Core Client):Jersey 客戶端 API 幫助您與 REST 服務輕鬆通訊。
  • 集成(Integration):Jersey 還提供能夠輕鬆集成 Spring、Guice、Apache Abdera 的庫。

  有沒有想當即動手寫一個的衝動?那麼就接着往下看吧。

Hello World:第一個 Jersey Web 項目

開發環境:

  • IDE:Eclipse
  • Web 容器:Apache Tomcat 7.0(Jetty 和其餘也能夠)
  • Jersey 庫:Jersey 2.16bundle,包含全部必需的庫

開發 REST 服務

  首先,咱們這個項目不是基於Maven Archetype的,若是想學習基於Maven Archetype的請移步至官網:https://jersey.java.net/documentation/latest/getting-started.html#new-from-archetype

  下面介紹普通的RESTful Web服務構造方法:

  第一步:

  首先,打開Eclipse,建立一個Dynamic Web Project,項目名隨意,此處起名爲hello。而後點擊Next,再次點擊Next,到達以下界面:

  勾選箭頭所指地方,生成web.xml文件。

  若是你直接點擊了建立,不要緊,仍是有補救方法的,右鍵項目,點擊箭頭所指項:

 

  便可生成文件web.xml文件。

  第二步:

  建立完成以後,將下載的Jersey bundle包解壓,而後將裏面的東西都複製到WEB-INF下的lib文件夾中便可。如今一個Jersey就搭建好了。

  第三步:

  如今,您已經設置好了開發第一個 REST 服務的環境,該服務對客戶端發出 「Hello」。

  要作到這一點,您須要將全部的 REST 請求發送到 Jersey 容器 —— 在應用程序的 web.xml 文件中定義 servlet 調度程序(參見清單 1)。除了聲明 Jersey servlet 外,它還定義一個初始化參數,指示包含資源的 Java 包。

  清單 1. 在 web.xml 文件中定義 Jersey servlet 調度程度
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3   <display-name>Hello</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12      <servlet>  
13     <servlet-name>Jersey REST Service</servlet-name>  
14     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
15     <init-param>  
16       <param-name>jersey.config.server.provider.packages</param-name> 
17       <param-value>com.test.restwebservice.rest</param-value>  
18     </init-param>  
19     <load-on-startup>1</load-on-startup>  
20   </servlet>  
21   <servlet-mapping>  
22     <servlet-name>Jersey REST Service</servlet-name>  
23     <url-pattern>/v1/*</url-pattern>  
24   </servlet-mapping> 
25 </web-app>

  如今您將編寫一個名爲 HelloResource 的資源,它接受 HTTP GET 並響應 「Hello Jersey」。

  清單 2. sample.hello.resources 包中的 HelloResource

1 @Path("/hello")
2 public class HelloResource {
3     @GET
4     @Produces(MediaType.TEXT_PLAIN)
5     public String sayHello() {
6         return "Hello Jersey";
7     }
8 }

該代碼中有幾個地方須要強調:

  • 資源類(Resource Class):注意,資源類是一個簡單的 Java 對象 (POJO),能夠實現任何接口。這增長了許多好處,好比可重用性和簡單。
  • 註釋(Annotation):在 javax.ws.rs.* 中定義,是 JAX-RS (JSR 311) 規範的一部分。
  • @Path:定義資源基 URI。由上下文根和主機名組成,資源標識符相似於 http://localhost:8080/Jersey/rest/hello。
  • @GET這意味着如下方法能夠響應 HTTP GET 方法。
  • @Produces以純文本方式定義響應內容 MIME 類型。

測試 Hello 應用程序

  要測試應用程序,能夠打開您的瀏覽器並輸入 URL http://<host>:<port>/<appctx>/rest/hello。您將看到響應 「Hello Jersey」。這很是簡單,使用註釋處理請求、響應和方法。固然用火狐的RESTClient也是不錯的選擇。

 

 

PS:本博客歡迎轉發,但請註明博客地址及做者,因本人水平有限,如有不對之處,歡迎指出,謝謝

  博客地址:http://www.cnblogs.com/voidy/

  博客新址:http://voidy.net

  <。)#)))≦

相關文章
相關標籤/搜索