2011年2月9日 星期三

JAX-RS Tomcat + RESTEasy

JAX-RS Tomcat + RESTEasy

  • Tomcat 6.0.32
  • RESTEasy 2.1.0.GA

RESTEasy 是 JSR 311 JBoss 的實做,在 Tomcat 6 整合 RESTEasy 的方式如下

1.設定 Maven Repository

加入 jboss 的 maven repository


2.設定 Dependecy


3.撰寫 Service


4.撰寫 application


設定 web.xml

在這裡需使用底曾實做的 servlet, RESTEasy 設定如下

設定上和 Jersey 的使用無異,servlet-class 的部份需使用 vendor 提供的 servlet, 但與 jersey 不同的是,以本示範為例,系統以/rs/* 做為 app 路徑時,必須在 web.xml 設定 context param resteasy.servlet.mapping.prefix,值為/rs後,之後才能正常運作。


Tomcat7 + RESTEasy

  • Tomcat 7.0.8
  • RESTEasy 2.1.0.GA

設定基本上與 Tomcat 6 版本無異,並無法感受到 servlet 3.0 以後的優勢,這一點和 Jersey 差異較大

參考

http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html_single/index.html

JAX-RS Tomcat + Jersey(2)

在 tomcat 7 及其他 JAVAEE 6 平台上架 JAX-RS 服務

  • tomcat 版本 7.0.8
  • jesrey 版本 1.5
  • jboss 版本 6.0.final
  • glassfish 3.0.1
步驟同 tomcat 6 的版本
  1. 建立 maven 上相關設定
  2. 撰寫 service
  3. 撰寫 application
  4. 設定 web.xml

步驟3,4內容有異
在步驟3加上 application url 宣告

步驟4 web.xml 部份無須任何添加相關 servlet 宣告

<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name><param-value>base.steven.app.RSApp</param-value></init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rs/*</url-pattern>
</servlet-mapping>

另外需修改 pom 檔中 javaee 的版本使其支援 servlet 3.0 的規範


這樣的寫法較與底層實作無關,移稙性較高(portable), 但僅限 servlet 3.0 的規範

相同的做法可移稙到 jboss 6 或 glassfish 3.x 以上的平台, 因javaee 6 specc 本身即支援 restful service, 所以打包的 war 檔無須再包含 jesrey 有關的套件。僅需在 pom 檔上移除對 jesrey 的相依設定

<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.5</version>
</dependency>

2011年2月8日 星期二

JAX-RS Tomcat + Jersey

在 tomcat 6 上架 JAX-RS 服務

透過 Jersey 來提供 restful service 的功能

  • tomcat 版本 6.0.32
  • jesrey 版本 1.5

maven 上的設定如下

新增一個 respository

設定 dependency


撰寫 Service

先來撰寫一個簡單的 restful service


將服務注冊在/hello/{name}這個路徑底下,{name}是變數,service 會依路徑上的 name 值回傳結果
如 /hello/sue 則回傳 Hello World! sue

撰寫 Application

再來寫一個 Application 將剛寫好的 service 註冊進去



設定 web.xml

在 servlet 2.x spec 的版本必須透過 jesery 提供的 servlet 來佈署服務在 web.xml 上註冊 servlet


執行及測試

將 service 放在 /rs/* 這個路徑底下
執行 tomcat
測試一下 curl http://localhost:8080/jaxrs/rs/hello/john 是不是回應
Hello World! john

參考資料
http://jersey.java.net/nonav/documentation/latest/jax-rs.html

補充:也可省略撰寫 application 的步驟,web.xml 的設定修改如下

指定 service 所在的 package 名稱,讓 Jesery 去搜尋套件底下可能的 service ,就不須另外再撰寫註冊 service 的 Application 類別了。