2011年2月9日 星期三

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 類別了。