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的相关内容:
![](https://img.haomeiwen.com/i1711843/30df05bd29cae770.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
网友评论