美文网首页
搭建一个简单的Jersey RESTful Webservice

搭建一个简单的Jersey RESTful Webservice

作者: BinaryBang | 来源:发表于2019-08-28 23:06 被阅读0次

1 什么是Jersey RESTful Webservice

关于这些名词,有一系列的冗长的解释,球球只做一下简单的解释:

1.1,什么是Webservice?

Webservice,就是将服务器中的信息返回给访问者,比如客户端,的一种数据交互方式;

1.2,什么是RESTful Webservice?

RESTful,是一种风格,最大的特征,就是返回结果是Json格式的;但是具体有什么特征,暂不研究;
符合RESTful设计风格的Webservice,就叫做RESTful Webservice了;

1.3,什么是JAX-RS API

JAX-RS即Java API for RESTful Web Services,是RESTful Webservice的一种规范;类似于java中会有接口类和接口的实现类,这里的JAX-RS可以认为是接口类.

1.4,什么是Jersey

JAX-RS只是一个技术规范,一个接口,允许各个厂家有自己的实现版本.Jersey,是Sun公司提供实现版本;

1.5,什么是Jersey Restful Webservice

Jersey RESTful Webservice,就是使用Jersey框架实现的RESTful Webservice.本文要讲述的主体就是单间一个简单的Jersey RESTful Webservice.
在第一节最后,我们通过一个图来了解Webservice的相关内容:


webservice.jpg

2 开始搭建Jersey Restful Webservice

第二节的目标是搭建一个Jersey RESTful Webservice项目.

2.1 Maven导入所需的包

需要导入两部分包,jersey-server,jersey-container-servlet,
版本都是2.22.2;
在pom.xml中加入以下内容:

<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-server -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.22.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.containers/jersey-container-servlet -->
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.22.2</version>
</dependency>

2.2 配置web.xml文件

配置资源加载器,以及servlet映射;
在web.xml中加入以下内容:

    <servlet>
        <servlet-name>JerseyServlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.tinywind.test.WebServiceConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>JerseyServlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

配置后,具有以下模式的url请求,将被映射至JerseyServlet并进行处理:
http://localhost:8080/WebserviceTest/rest/*
其中,WebserviceTest是项目名称;

2.3 定义资源

@Path("/webservice1")
public class WebService1 {      
    @Path("{sub_path:[a-zA-Z0-9]*}/{name}")    
    @GET   
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello(@PathParam("sub_path") String resourceName,@PathParam("name") String name,@DefaultValue("lucky") @QueryParam("description") String description) {
        String str = String.format("This is webservice1,resourceName is %s,name is %s,description is %s", resourceName,name,description);
        return str;
    }
}

其中用到的一些标注如下:

  • 为资源类或方法定义URI
    @Path
    除了支持静态URI还支持动态URI;
    按照该示例的配置,要访问sayHello方法,需要请求的URI为:
    http://localhost:8080/WebserviceTest/rest/webservice1/person/GikkiAres
    其中,person匹配sub_path,GikkiAres匹配name;
    会对动态部分进行验证,如果不符合[a-zA-Z0-9]的规则的话,就会返回404.

  • 获取uri中的参数
    @PathParam
    获取请求uri中匹配的参数;

  • 查询字符串中的参数
    @DefaultValue("lucky") @QueryParam("description") String description)
    DefaultValue表示,当查询字符串没有写description属性时,相当于默认传了一个值为lucky的参数;如果写了description属性,那么就使用description的值传入description参数中;

使用默认值示例:
http://localhost:8080/WebserviceTest/rest/webservice1/person/GikkiAres

指定值示例:
http://localhost:8080/WebserviceTest/rest/webservice1/person/GikkiAres?description=fat

  • 表明请求方式
    @GET,@POST,@PUT,@DELETE
    指明了客户端要访问该资源方法时,需要使用的访问的类型;

  • 定义媒体类型
    @Produces
    容器负责确认被调用的方法可以返回HTTP请求可以接受的媒体类型,否则返回406 Not Acceptable.

2.4 定义资源加载器

新建WebServiceConfig类继承ResourceConfig ,内容如下:

package com.tinywind.test;

import org.glassfish.jersey.server.ResourceConfig;
import com.tinywind.webservice.WebService1;
import com.tinywind.webservice.WebService2;

public class WebServiceConfig extends ResourceConfig {
        public WebServiceConfig() {
        //方式一
//      register(WebService1.class);
//      register(WebService2.class);
        //方式二
        packages("com.tinywind.webservice");
    }
}

有两种方式注册资源,方式一是一次注册一个类;方式二是一次注册包下的所有类;
两种方式可以使用一种,也可以搭配使用;

Reference

1,Jersey框架一:Jersey RESTful WebService框架简介
2,Jersey是一个什么框架,价值在哪里?
3,JavaJersey2使用总结
4,Jersey构建REST服务实战
5,Java完成最简单的WebService创建及使用(REST方式,Jersey框架)
6,REST简介
7,RESTful和JAX-RS

相关文章

网友评论

      本文标题:搭建一个简单的Jersey RESTful Webservice

      本文链接:https://www.haomeiwen.com/subject/bkivectx.html