• 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>

     
  • 相关阅读:
    【数据结构】树的DFS序&欧拉序
    Codeforces 1335E2
    Codeforces 1335E1
    Codeforces 1338A/1339C
    【数据结构】ST算法
    Codeforces 1334C
    Codeforces 1333D
    Codeforces 1333C
    python中的socket编程实例与查看端口占用
    java中打印数组
  • 原文地址:https://www.cnblogs.com/juepei/p/4006344.html
Copyright © 2020-2023  润新知