zoukankan      html  css  js  c++  java
  • 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>

     
  • 相关阅读:
    51 Nod 1068 Bash游戏v3
    51 Nod Bash 游戏v2
    51 Nod 1073 约瑟夫环
    UVA 12063 Zeros and ones 一道需要好好体会的好题
    51 Nod 1161 Partial sums
    2018中国大学生程序设计竞赛
    UVA 11971 Polygon
    UVA 10900 So do you want to be a 2^n-aire?
    UVA 11346 Possibility
    python with as 的用法
  • 原文地址:https://www.cnblogs.com/juepei/p/4006344.html
Copyright © 2011-2022 走看看