Jersey構建Restful風格的webservices


最近一直在搞老項目的開發工作,很少寫博文了。聽了兩位阿里巴巴大牛的討論,決定試試用restful風格的webservices看看。

這里用的是Jersey這個框架,剛開始弄,有點麻煩,只能到處查資料。網上的資料也比較零碎,這里整理一下。

一.helloworld

需要三個包,這里從maven獲取。

   <dependencies>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.18</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.18</version>
        </dependency>
        <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.18</version>
    </dependency>
    </dependencies>

然后再web.xml中代碼:

    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>
            com.sun.jersey.spi.container.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>hello.resource</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

寫一個資源類:

@Path("hello")
public class HelloResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String greed(){
        return "hello world";
    }
}

這樣,訪問:http://localhost:8080/rest/hello ,可以看到頁面會輸出:hello world

二.傳遞參數

在HelloResource這個類中,新加一個方法:

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @Path("{id}")
    public String sayHello(@PathParam("id")int id){
        return "hello jersey "+id;
    }

此時,訪問:http://localhost:8080/rest/hello/123 ,頁面會輸出:

hello jersey 123

后面的123即是參數id的值。試了一下,如果再寫一個一樣的方法,把參數類型改成String類型,當輸入參數類型不同的時候,會自動識別不同的方法。不過中文不可以直接跟在后面,會有亂碼的情況。

我們一般傳遞參數的話,是采用?符來進行傳參的。上面的方式看上去有點奇怪,不符合我們經常用的方式。

這里還有一種方式,適合我們的方式,不采用PathParam這個屬性,采用QueryParam這個。

再寫一個方法:

    @GET
       @Path("/param")
       @Produces("text/plain")
       public String sayHis(@QueryParam("param")String param){
        return "nice "+param;
    }

此時,訪問:http://localhost:8080/rest/hello/param?param=work ,頁面會輸出:

nice work

這些算是一個基本入門,關於客戶端使用等相關知識,在之后的博文中再寫。

這里有一篇博文寫的也不錯:

http://my.oschina.net/mlongbo/blog/152548#OSC_h5_14

 

另附glassfish配置方式:

上面是用com.sun的包,還有一種是org.glassfish的包。

配置都差不多。

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>
            org.glassfish.jersey.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>hello.resource</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

</web-app>

目前接觸到的區別在於,用glassfish方式,配置后的json,不需要下載,瀏覽器即可顯示出json內容。用sun的話,直接用json格式輸出,需要下載打開才可以看到。不知道是不是也需要一些類似的配置。

 需要的包:

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core"  -->
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.13</version>
        </dependency>
        <!-- Required only when you are using JAX-RS Client -->
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.13</version>
        </dependency>
    </dependencies>

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM