基於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
表 1 演示了典型 RESTful Web 服務中使用的資源 URI 和 HTTP 方法。(參考資料 提供了有關 RESTful Web 服務的更多介紹和設計考慮事項。)服務器
表 1. RESTful Web 服務示例架構
方法/資源app |
資源集合, URI 如: |
成員資源,URI 如: |
GET |
列出資源集合的全部成員。 |
檢索標識爲 1234 的資源的表示形式。 |
PUT |
使用一個集合更新(替換)另外一個集合。 |
更新標記爲 1234 的數字資源。 |
POST |
在集合中建立數字資源,其 ID 是自動分配的。 |
在下面建立一個子資源。 |
DELETE |
刪除整個資源集合。 |
刪除標記爲 1234 的數字資源。 |
那麼又如何來構建Restful web服務呢?本文介紹一個簡單易學的構建Restful web服務的方法,便是使用Jersey構建Restful web服務。
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 的參考實現,它包含三個主要部分。
有沒有想當即動手寫一個的衝動?那麼就接着往下看吧。
開發環境:
開發 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 <?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 }
該代碼中有幾個地方須要強調:
@Path
:定義資源基 URI。由上下文根和主機名組成,資源標識符相似於 http://localhost:8080/Jersey/rest/hello。@GET
:
這意味着如下方法能夠響應 HTTP GET
方法。@Produces
:
以純文本方式定義響應內容 MIME 類型。要測試應用程序,能夠打開您的瀏覽器並輸入 URL http://<host>:<port>/<appctx>/rest/hello。您將看到響應 「Hello Jersey」。這很是簡單,使用註釋處理請求、響應和方法。固然用火狐的RESTClient也是不錯的選擇。
PS:本博客歡迎轉發,但請註明博客地址及做者,因本人水平有限,如有不對之處,歡迎指出,謝謝
博客地址:http://www.cnblogs.com/voidy/
博客新址:http://voidy.net
<。)#)))≦