带有Jersey的RESTful Web服务的JAX-RS教程

在当今世界,数据起着非常重要的作用。 如此众多的应用程序将各种类型的数据用于不同的操作,所以最重要的方面是应用程序之间的通信。 当应用程序之间可以通信时,数据共享变得容易。

就像在亚洲运行的应用程序向在欧洲运行的应用程序提供数据一样,反之亦然。 在美国托管的Facebook服务器如何能够在亚洲提供Facebook服务? 在世界不同地区托管的众多网站中,如何有可能使用Google帐户验证选项?

上述问题的答案是Web服务。 如下所述,有两种类型的Web服务。

  1. REST Web服务
  2. 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.1Gradle

如果我们使用Gradle,那么我们必须在project-dependencies部分中添加以下行。

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
  • Gradle– 4.6
  • JAX-RS 2.1
  • 泽西岛2.26
  • Tomcat 9.0

5.项目结构

我们的项目结构如下图所示。

JAX-RS项目的项目结构

上面显示的项目结构用于JAX-RS的计划实施,可以从Jersey网站下载库。 对于具有build.gradle和pom.xml的项目,项目结构将略有不同。

6.方案目标

作为程序的一部分,我们将尝试使用Jersey创建一个简单的Web服务。 另外,我们将尝试了解创建Web服务所需完成的配置和设置。

6.1罐子

以下是将成为文件夹WEB-INF/lib的Jar的列表。

Jars作为JAX-RS项目构建的一部分

有两种方法可以将jar添加为项目的一部分。 这两种方式都在下面提到。

  1. 使用构建文件添加Jar:通过将jar和版本作为依赖项,可以使用build.gradle或pom.xml之类的构建文件将jar添加到项目中。
  2. 从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这个参数定义泽西将寻找服务类的软件包。 此处定义的包应包含服务类。 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与Eclipse以及JAX-RS项目集成在一起

现在让我们启动tomcat服务器。

tomcat服务器启动后,我们将在浏览器中键入以下URL。

http:// localhost:8080 / JaxRsTutorial / rest / hi / Anand

请注意,URL首先包含项目名称,然后包含作为web.xml一部分提到的url模式,然后是服务路径,最后是路径参数,即名称。

以下屏幕将出现在浏览器中。

浏览器上的Web服务结果

7.下载Eclipse项目

这是使用Jersey的JAX-RS教程。

您可以在此处下载此示例的完整源代码: JaxRsTutorial.zip

翻译自: https://www.javacodegeeks.com/2018/04/jax-rs-tutorial-with-jersey-for-restful-web-services.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql --force -f_Mysql_mysql force Index 强制索引

其他强制操作&#xff0c;优先操作如下&#xff1a;mysql常用的hint对于经常使用oracle的朋友可能知道&#xff0c;oracle的hint功能种类很多&#xff0c;对于优化sql语句提供了很多方法。同样&#xff0c;在mysql里&#xff0c;也有类似的hint功能。下面介绍一些常用的。强制索…

Linux 查看文件位置/查看文件路径的命令

which 查看可执行文件的位置find 实际搜寻硬盘查询文件名称whereis 查看文件的位置locate 配合数据库查看文件的位置

抽象工厂模式设计模式_创新设计模式:抽象工厂模式

抽象工厂模式设计模式抽象工厂模式是一种创新模式&#xff0c;是与构建器和工厂模式一起最受欢迎的模式之一。 使用创建模式是为了创建对象&#xff0c;而不是直接使用构造函数创建对象。 抽象工厂模式提供了一种封装一组具有共同主题的单个工厂而无需指定其具体类的方法。 采…

dubbo protocol port 消费者端_Dubbo源码:搞定URL,就走完了进度条的一半

Dubbo 中的 URL大家都知道&#xff0c;在互联网领域&#xff0c;每个信息资源都有统一的且在网上唯一的地址&#xff0c;该地址就叫 URL&#xff08;Uniform Resource Locator&#xff0c;统一资源定位符&#xff09;&#xff0c;它是互联网的统一资源定位标志&#xff0c;也就…

swarm 容器_Oracle应用容器云上的WildFly Swarm

swarm 容器在此博客文章中&#xff0c;我将描述如何将打包在WildFly Swarmber -jar中的CloudEE Duke应用程序部署到Oracle Application Container Cloud 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件&#xff0c;其中包含应用程序ber-j…

mysql数据库文件还原数据库_MySql通过数据库文件恢复数据库

以表”Table”为例:如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中.如类型是InnoDB, 数据文件则存储在”$innodb_data_home_dir/″中的ibdata1文件中(一般情况)&#xff0c;结构文件存在于table_name.fr…

yum 如何知道从哪里下载包?

包来自什么地方呢&#xff1f;yum 如何知道从哪里下载包&#xff1f;起点是 /etc/yum.repos.d/ 目录&#xff0c;这个目录常常包含几个 repo 文件。这是 repo 的默认位置&#xff0c;但是可以在 YUM 配置文件&#xff08;通常是 /etc/yum.conf&#xff09;中指定其他位置。清单…

mysql主从修改系统参数步骤_mysql主从配置的参数配置与步骤_MySQL

mysql主从配置的参数配置与步骤_MySQL主从配置的步骤&#xff1a;在主库建立要同步的数据库,建立主库的帐号和修改主备库配置create database web default character set utf8grant replication slave on *.* to repdcssub192.168.191.112 identified by 123456;grant all priv…

javascript 解密_Javascript中的AES加密和Java中的解密

javascript 解密AES代表高级加密系统&#xff0c;它是一种对称加密算法&#xff0c;很多时候我们需要在客户端加密一些纯文本&#xff0c;例如密码&#xff0c;然后将其发送到服务器&#xff0c;然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台&#xff0…

英文标点符号大全

标点符号英文中文名称未知反撇号’apostrophe撇号&#xff0c;缩写及所有格符号plus加号&#xff1b;正号-minus减号&#xff1b;负号plus or minus正负号is multiplied by乘号is divided by除号&#xff1d;is equal to等于号≠is not equal to不等于号≡is equivalent to全等…

Linux 系统下显示文件内容(查看文件内容)的命令 more/less/cat/head/tail 比较

命令说明more建议用于查看内容较长的文本文件&#xff0c;内容可以分屏显示&#xff0c;并且支持在显示时定位关键字cat建议用于查看内容较少的文本文件。当文件较大时&#xff0c;文本在屏幕上迅速闪过&#xff08;滚屏&#xff09;&#xff0c;用户往往看不清所显示的内容。因…

mysql子分区多少层_MySQL 子分区-阿里云开发者社区

介绍子分区其实是对每个分区表的每个分区进行再次分隔&#xff0c;目前只有RANGE和LIST分区的表可以再进行子分区&#xff0c;子分区只能是HASH或者KEY分区。子分区可以将原本的数据进行再次的分区划分。一、创建子分区子分区由两种创建方法&#xff0c;一种是不定义每个子分区…

gradle 编译java_Java的Gradle依赖关系,使用编译还是实现?

gradle 编译java当我向一位同事解释如何将Gradle用于Java项目时&#xff08;他正在远离Maven &#xff09;&#xff0c;我们遇到了各种代码示例。 一些示例将编译配置用于依赖项&#xff0c;而其他示例则使用Implements和api 。 dependencies { compile commons-httpclient:co…

Linux 命令之 typeset -- 声明 shell 变量,设置变量的属性

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;1&#xff09;定义关联数组并访问一、命令介绍 typeset 命令是 bash 的内建命令&#xff0c;是命令 declare 的别名&#xff0c;两者是完全一样的&#xff0c;用来声明 shell 变量&#xff0c;设置变量的属性。 用于…

git log 迁移_现场故事:从Log4J迁移到Log4J2

git log 迁移通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; 与许多Java应用程序一样&#xff0c;AppDynamics Java代理广泛使用日志记录。 多年来&#xff0c;我们一直使用Log4J作为我们的日志记…

mysql firebird 性能_Firebird, MySQL 与 PostgreSQL 代码质量对比

今天看到一篇文章 - “Firebird, MySQL 与 PostgreSQL 代码质量对比”- 关于三个开源 RDBMS 的静态分析比较。主要内容A few words about the projectsFirebirdMySQLPostgreSQLPVS-StudioComparison criteriaWhy "head-on" comparison is not a good ideaAn alterna…

Linux 命令之 let -- bash 中用于计算的工具,用于执行一个或多个表达式

文章目录一、命令介绍二、命令示例自增操作自减操作shell 脚本中的运算表达式一、命令介绍 let 命令是 BASH 中用于计算的工具&#xff0c;用于执行一个或多个表达式&#xff0c;变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符&#xff0c;则必须引…

sun jdk 与jdk_Sun过去的世界中的JDK 11和代理

sun jdk 与jdk使用JDK 11后&#xff0c;就sun.misc.Unsafe的第一种方法。 其中&#xff0c; defineClass方法已删除。 代码生成框架通常使用此方法在现有的类加载器中定义新的类。 尽管此方法易于使用&#xff0c;但它的存在也使JVM本质上不安全&#xff0c;正如其定义类的名称…

php mysql上传多张图片_PHP开发之多个文件上传到MySql数据库(一)

前面的章节我们介绍了用PHP实现上传一个文件的教程。朋友们就会有疑问&#xff0c;怎么样才能上传多张多个文件到数据库&#xff1f;重点在于放入几个文件以后点击提交上传之后所有的文件一起上传&#xff0c;并且每个文件都给一个新的路径。提供一种思路&#xff1a;先获取每个…