記錄一下,要用 Jersey 需要以下四個套件:
- asm-3.1.jar
- jersey-core-1.1.2-ea.jar
- jersey-server-1.1.2-ea.jar
- jsr311-api-1.1.jar
2013-08-25 補充:
Jersey 現在有重新包裝過,以 Jersey 1.17.1 版來說
只需要下載 Jersey 1.17.1 JAR bundle 這一個 JAR 檔,外加 Jersey 1.17.1 ZIP bundle 中的 asm 3.1.jar,就可以架起基本的 RESTful 服務了。
在 Web Project 當中還要設定啟動 Jersey 的設定,才會允許 Jersey 在專案啟動時被讀進去。
在 [ProjectName]/WebContent/WEB-INF/web.xml 裡面新增以下的標籤:
<servlet> <servlet-name>ServletAdaptor</servlet-name> <servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ServletAdaptor</servlet-name> <url-pattern>/resource/*</url-pattern> </servlet-mapping>其中可以注意上面的 XML 標籤中的
這個標籤是定義如何用網址呼叫 RESTful 服務~例如我指定了一個服務的 Path 是 /login
依照上面的設定,要執行這個 RESTful 服務必須在網址列上輸入 http://[ip]/[project]/resource/login
其中 [ip] 表示伺服器的 IP、[project] 表示網站專案的專案名稱。
如果不想要任何前綴詞,可以直接指定為 /*,例如:
<url-pattern>/*</url-pattern>
而 REST 的程式碼範例如下:
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/test") public class JerseyRest { @GET @Path("/test") @Produces(MediaType.TEXT_PLAIN) public String testRest () { return "Test OK."; } }@Path 表示的是這個資源表示的相對路徑,類別上的 Path 和方法上的 Path 會形成階層關係
也就是要存取 testRest() 這個方法時,要使用的 URI 會是 http://[ip]/[project]/resource/test/test。
@GET 表示這個服務是一個 GET 的服務
如果瀏覽器嘗試存取這個 URI,但是使用不是 GET 的 Method,就會獲得 405 Method Not Allow 的回應。
另外值得注意的是,Jersey 不允許同樣 URI 的同樣服務存在,但如果是不同服務就可以同時存在
例如我不能建立兩個同樣是 ../test/test 的 GET 服務,但是可以建立一個 ../test/test 的 GET 加上一個 ../test/test 的 POST 服務。
@Produces 表示這個服務回應的結果,這裡表示回應的是單純的文字
因此在瀏覽器存取這個 URI 時,獲得伺服器回應的標頭中,就會有「Content-Type: text/plain」這樣的內容。
參考資料:
1、[JAVA] 快快樂樂學JAVA RESTful Service using Jersey
2、使用 Jersey + Tomcat 輕鬆開發 RESTful Web Service
3、Jersey Download
4、Java 與 REST 的邂逅,淺談 Jersey 及 JAX-RS(一)
沒有留言:
張貼留言