2014年12月1日 星期一

【筆記】一個簡單的JAX-RS應用程式範例

這裡使用GlassFish 4來當伺服器,使用它的好處在於在GlassFish的函式庫( <glassfish安裝目錄>/glassfish/modules)中,已經內含支援JAX-RS的函式庫(如:jersey-container-servlet-core.jar等),我不用再另外下載,而且日後可以和其他Java EE元件搭配應用。


這裡使用Eclipse來進行開發。

先在Eclipse新建一個名為「jaxrs-example」的【Dynamic Web Project】專案。

再來在idv.jk.jaxrs套件下,新增一個名為「UserService.java」的類別:
package idv.jk.jaxrs;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/user")
public class UserService
{
 @GET
 @Path("/{name}")
 public Response sayHello(@PathParam("name") String name)
 {
  String message = "Hello, " + name;
  return Response.status(200).entity(message).build();
 }
}
其中,宣告在UserService類別上的這個@Path("/user")是跟容器講,若是/userURL,就交給我負責。

而在sayHello上面的@Path("/{param}")是說在/user後面接的URL可視為一個參數,在@PathParam("name")可以將此參數補捉下來,傳入方法使用,如客戶端使用/user/bio來做請求,則在sayHello傳入的name參數值就會是bio

再來在web.xml中加入下面程式片段,來設定servlet-mapping

    jaxrs-servlet
    org.glassfish.jersey.servlet.ServletContainer
    
      jersey.config.server.provider.packages
      idv.jk.jaxrs
    
    1


    jaxrs-servlet
    /service/*

這段設定用白話文來講,就是/service開頭的請求,都是用org.glassfish.jersey.servlet.ServletContainer這個類別來負責,而它會去idv.jk.jaxrs這個套件下去找,有沒有可以負責特定URL的類別,如上列的UserService類別就會是被設定為負責處理/service/user的請求,如:http://localhost:8080/jaxrs-example/service/user/bio,而前列URL中的bio,就會被捉出來當做傳入sayHello的參數。

一個簡單的JAX-RS應用程式只要上列兩個檔案的設定即可,再來啟動GlassFish並部署程式,成功之後,開啟瀏覽器,並在網址列輸入:http://localhost:8080/jaxrs-example/service/user/bio,網頁應為回應下列訊息:


參考來源:

沒有留言: