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


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

  現如今,RESTful架構已然成為了最流行的一種互聯網軟件架構,它結構清晰、符合標准、易於理解、擴展方便,所以得到越來越多網站的采用。那么問題來了,它是什么呢?

起源 

  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 服務應該定義以下方面:

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

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

  表 1. RESTful Web 服務示例

方法/資源

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

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

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

  <。)#)))≦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM