在当今世界,数据扮演着非常重要的角色。 如此众多的应用程序将各种类型的数据用于不同的操作,所以最重要的方面是应用程序之间的通信。 当应用程序可以通信时,它们之间的数据共享变得容易。
就像在亚洲运行的应用程序向在欧洲运行的应用程序提供数据一样,反之亦然。 在美国托管的Facebook服务器如何在亚洲提供Facebook服务? 在世界不同地区托管的众多网站中,如何有可能使用Google帐户验证选项?
上述问题的答案是Web服务。 如下所述,有两种类型的Web服务。
- REST Web服务
- SOAP Web服务
让我们详细讨论REST Web服务。
1.简介
1.1 REST
REST是基于Web标准和HTTP协议的数据传输的体系结构原理。 在REST中,有使用REST服务器托管的资源。 每个资源都有一个称为URI的唯一ID,可以使用REST客户端进行修改和访问。
REST允许以XML,JSON,Text等不同格式表示资源。
1.2 HTTP操作
由于REST支持HTTP协议,因此它允许对资源进行以下操作。
- GET – GET请求用于访问资源,它以所需格式表示资源。
- POST – POST请求用于更新现有资源。 它也用于创建新资源。 它支持各种格式的资源表示。
- PUT – PUT请求用于通过完全替换现有资源来更新资源。 根据定义,PUT请求是幂等的。
- DELETE – DELETE请求用于删除资源。
在REST Web服务中,我们还有以下两种不同类型的REST Web服务。
- RESTful Web服务
- RESTless Web服务
作为教程的一部分,我们将详细讨论RESTful Web服务。
1.3 RESTful Web服务和JAX-RS
RESTful Web服务是遵循基于REST的体系结构的服务,主要用于网站。 它简单,快速,因为它不受严格的限制,并且消耗的带宽更少。
Java提出了用于根据REST体系结构创建Web服务的编程规范。 该API规范的名称是JAX-RS,它表示RESTful Web服务的Java API。 JAX-RS是Java SE 5的一部分,并成为Java EE 6中Java家族的永久成员。JAX-RS的当前版本是2.1版,于2017年9月发布。
2.注释
让我们讨论一下JAX-RS支持的不同注释和规范。
-
@Path
:-告诉资源类或方法的相对路径。 -
@GET
:-HTTP Get请求,用于获取资源。 -
@PUT
:-HTTP PUT请求,用于创建资源。 -
@POST
:-HTTP POST请求,用于创建或更新资源。 -
@DELETE
:-HTTP DELETE请求,用于删除资源。 -
@HEAD
:-这是HTTP HEAD请求,用于获取方法可用性的状态。 -
@Produces
:-告诉您从Web服务生成的HTTP响应的类型。 例如,APPLICATION / XML,APPLICATION / JSON等。 -
@Consumes
:-这告诉Web服务可以处理的HTTP请求的类型。 例如,APPLICATION / XML可用于以XML格式发送请求。 -
@PathParam
:-它将传递给方法的参数绑定到路径中的值。 -
@QueryParam
:-它将传递给方法的参数绑定到路径中的查询参数。 -
@HeaderParam
:-这@HeaderParam
传递给方法的参数绑定到HTTP标头。 -
@DefaultValue
:-它将为传递给方法的参数分配默认值。 -
@Context
:-它是资源的上下文。 例如,将HTTPRequest作为上下文。
3.球衣
3.1什么是球衣
Jersey是一个开放源代码框架,用于构建RESTful Web服务。 它不仅仅是JAX-RS的实现。 Jersey还提供了自己的API,以使Web服务的创建更加简单和有用。 它还提供了许多SPI,以根据开发人员的需求扩展框架。
3.2球衣的组成
泽西岛充满了很多功能和组件。 但是,泽西岛有四个主要组成部分。 它们如下。
- 核心服务器:-用于构建RESTful Web服务。 这些组件包括jersey-core,jersey-server和jsr311-api。
- 核心客户端:-为了与Web服务交互,我们需要一个客户端在Web服务之间进行通信。 这些组件由jersey-client组成。
- JAXB支持: -Jersey提供对JAXB的支持。 它使XML到对象的转换变得容易。 执行此支持的组件是jersey-server。
- JSON支持: Jersey提供对JAXB的支持。 它使JSON到对象的转换变得容易。 执行此支持的组件是jersey-server。
- 与Spring和Guice框架轻松集成。
这些是Jersey的一些主要组件和功能。 现在让我们讨论如何安装Jersey。
3.3球衣安装
有两种方法可以在程序中安装Jersey。 我们可以使用Gradle,也可以从jersey网站执行直接安装。
让我们来看看这两种方式。
3.3.1摇篮
如果我们使用Gradle,则必须在项目依赖项部分中添加以下行。
compile 'org.glassfish.jersey.containers:jersey-container-servlet-core:2.26'
请注意,项目名称从2.26版本开始已更改。 所有早期版本的名称都只有jersey-container-servlet
。
3.3.2从Jersey网站安装
要从其网站安装Jersey,我们可以在网站上下载该软件包,其中包含除第三方依赖项之外的所有依赖项。
您可以从此链接下载软件包。
下载软件包后,解压缩zip文件并将所有jar粘贴到程序的WEB-INF/lib
中。 这就是您现在准备使用球衣的全部。
4.工具与技术
让我们看看用于构建程序的技术和工具。
- Eclipse Oxygen.2发布(4.7.2)
- Java –版本9.0.4
- 摇篮– 4.6
- JAX-RS 2.1
- 泽西岛2.26
- Tomcat 9.0
5.项目结构
我们的项目结构如下图所示。
上面显示的项目结构用于JAX-RS的计划实施,可以从Jersey网站下载库。 对于带有build.gradle和pom.xml的项目,项目结构将略有不同。
6.方案目标
作为程序的一部分,我们将尝试使用Jersey创建一个简单的Web服务。 另外,我们将尝试了解创建Web服务所需完成的配置和设置。
6.1罐子
以下是将成为文件夹WEB-INF/lib
的Jar的列表。
有两种方法可以将jar添加为项目的一部分。 两种方式都在下面提到。
- 使用构建文件添加Jar:可以通过使用jar和版本作为依赖项,使用build.gradle或pom.xml之类的构建文件将jar添加到项目中。
- 从Jersey网站下载:上面提到的所有jar都是Jersey软件包的一部分,可以下载并复制粘贴到WEB-INF / lib。 下载Jars的链接 。
5.2 JAX-RS的配置
为了使用JAX-RS,我们必须将Jersey注册为REST请求的调度程序servlet。 我们必须将web.xml
修改为以下几行。
泽西岛的Web.xml作为分派器servlet
<?xml version = "1.0" encoding = "UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>JAX-RS Application Demo</display-name><servlet><servlet-name>jersey-servlet</servlet-name><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class><init-param><param-name>jersey.config.server.provider.packages</param-name><param-value>com.tutorial</param-value></init-param></servlet> <servlet-mapping><servlet-name>jersey-servlet</servlet-name><url-pattern>/rest/*</url-pattern></servlet-mapping>
</web-app>
web.xml
有不同的标记,用于不同的目的。 display-name
仅用于显示目的。 init-param
标签用于初始化。 我们使用了一个参数jersey.config.server.provider.packages
该参数定义了Jersey将针对服务类查找的软件包。 此处定义的包应包含服务类。 url-patter
此标记用于定义URL模式。 默认情况下,URL的开头将是项目名称,后跟在此标记处定义的url-pattern。
6.3服务等级
服务类负责处理请求。 调度程序Servlet(在我们的示例中为Jersey)接收到请求后,该请求将根据URL路径传输到服务类。 服务类名称为HelloWorld.java
项目服务等级
package com.tutorial;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;@Path("/hi")
public class HelloWorld
{@GET@Path("/{name}")public Response getMessage(@PathParam("name") String name){String outMsg = "Hello " + name + "!";return Response.status(200).entity(outMsg).build();}}
在上面的代码@Path
针对URL路径定义。 因此,URL将包含项目名称,定义为web.xml一部分的url模式以及@Path
注释支持的属性。 该请求将由调度程序servlet转移到此类。 @GET
定义了HTTP方法的类型。 如果它包含带有这些{}
括号的@Path
参数,则这些参数称为@PathParam
。 在我们的情况下, name
是路径参数。 您可以在服务级别以及方法级别定义路径。
6.4运行程序
为了运行该程序,需要一个Web服务器来运行Web服务。 对于我们的程序,我们使用了Apache Tomcat。
让我们创建一个war文件并将war部署在tomcat服务器上。 另外,我们可以将tomcat服务器与Eclipse集成在一起。 一旦Tomcat服务器与Eclipse集成在一起并且在服务器上部署了项目战,我们将获得以下屏幕。
现在让我们启动tomcat服务器。
tomcat服务器启动后,我们将在浏览器中键入以下URL。
http:// localhost:8080 / JaxRsTutorial / rest / hi / Anand
请注意,URL首先包含项目名称,然后包含作为web.xml一部分提及的url模式,然后是服务路径,最后是路径参数,即名称。
以下屏幕将出现在浏览器中。
7.下载Eclipse项目
这是使用Jersey的JAX-RS教程。
翻译自: https://www.javacodegeeks.com/2018/04/jax-rs-tutorial-with-jersey-for-restful-web-services.html