Jersey 与 jax-rs 有啥区别
Posted
技术标签:
【中文标题】Jersey 与 jax-rs 有啥区别【英文标题】:What difference between Jersey vs jax-rsJersey 与 jax-rs 有什么区别 【发布时间】:2013-07-27 03:51:09 【问题描述】:我真的不明白什么是球衣..
我知道 Jax-RS 是一个用于构建 REST Web 服务的 API,还有 jersey? 我得到了一些信息,所有人都说:“球衣是 Jax-RS 的实现”。但这意味着什么?
如果 jax-rs 是一个 API,为什么我们需要 jersey 来创建一个 REST Web 服务? jersey 是否还有更多的库来瞄准 jax-rs?如果是,jax-rs 是一个不完整的 API?
【问题讨论】:
在 JAX-RS 规范的实现中的球衣 Jersey 只是一个以更简单的方式使用 JAX-rs 的接口。 JAX-RS 不提供 servlet,但 Jersey 提供。 Jersey 提供了一个库来在 Java servlet 容器中实现 Restful Web 服务,Jersey 提供了一个 servlet 实现,它扫描预定义的类以识别 RESTful 资源。在您的 web.xml 配置文件中,为您的 Web 应用程序注册此 servlet。 JAX-RS 是一个规范(它基本上告诉了要实现/遵循什么),而 Jersey 是一个实现(这意味着应该如何实现这些规范)。我们可以对一个规范有多个实现。我们有 JAX-RS 的库,因为我们可以在您的代码中使用 JAX-RS API,这样将来如果您更改您的实现(在本例中为 Jersey 为其他东西),您的代码仍然可以正常工作。您可以将其与您的接口和实现类相关联。 @VishalAkkalkote 你好,我正试图解决这个问题。我在工作中使用 Websphere 8.5,并且我正在尝试使用 JAX-RS 编写 REST 服务,但所有教程都显示带有 Jersy 的 JAX-RS。你是说,我可以编写相同的 EXACT 代码,即使我不使用 Jersy lib 也可以工作? @superPhreshHackerKid 是的。如果您将使用 JAX-RS 的实现之一,它应该可以工作。例如阿帕奇 CXF 【参考方案1】:单独使用JAX-RS不能实现REST,需要注册Jersey为web.xml
上REST请求的servlet dispatcher
设计了一个标准且可移植的 JAX-RS API。 Jersey RESTful Web 服务框架是开源的、生产质量的、用于在 Java 中开发 RESTful Web 服务的框架,它提供对 JAX-RS API 的支持并用作 JAX-RS(JSR 311 和 JSR 339)参考实现。
Jersey 框架不仅仅是 JAX-RS 参考实现。 Jersey 提供了自己的 API,通过附加功能和实用程序扩展了 JAX-RS 工具包,以进一步简化 RESTful 服务和客户端开发。 Source
For more
Restlet 和 Jersey 是用于在 Java 生态系统中开发 RESTful Web 服务的两个最流行的 JAX-RS 实现,但也存在一些其他实现,例如Apache Wink、Apache CXF 和 JBoss RESTEasy。 Source
【讨论】:
【参考方案2】:JAX-RS 是一个规范,Jersey 是一个 JAX-RS 实现。- 是的
这可以理解为与 OOPS 原则相关,JAX-RS 是一个接口,Jersey 是一个实现该接口的类。
这些规范为开发和使用网络服务创建了一个标准。
还有其他的 JAX-RS 实现,例如 wink、RestEasy。
JAX-RS 是一个规范,它指定我们如何实现 Web 服务,即输入类型、输入格式、输出类型、其格式、配置等。它只是一个类型声明及其实现就是这些库, Jersey, wink RestEasy 等。
此外,Java 也有 JPA(Java Persistence API) 之类的规范,如上所述,还有 Hibernate,它是 JPA 的一种实现。
【讨论】:
【参考方案3】:JAX-RS 是一个规范(只是一个定义),Jersey 是一个 JAX-RS 实现。 Jersey 框架不仅仅是 JAX-RS 参考实现。 Jersey 提供了自己的 API,通过附加功能和实用程序扩展了 JAX-RS 工具包,以进一步简化 RESTful 服务和客户端开发。
【讨论】:
【参考方案4】:直接来自jersey 网站
Jersey 框架不仅仅是 JAX-RS 参考实现。 Jersey 提供了自己的 API 来扩展 JAX-RS 工具包 进一步简化 RESTful 服务的附加功能和实用程序 和客户开发。 Jersey 还公开了许多扩展 SPI,因此 开发人员可以扩展 Jersey 以最适合他们的需求。
【讨论】:
嗯,我读到了,但不要问我的问题。如果我们有 jax-rs,为什么我们需要球衣? jax 不完整? @user1851366 想象一下,有一个慈善组织创建(并免费赠送)汽车设计。世界各地的制造商都认识到这些设计是好的,并根据这些设计实施真正的汽车。嗯,JAX-RS 就像一个关于如何构建 RESTful API 的计划或设计,软件制造商认识到它并使用真正的 RESTful API 实现这些想法,其中一个称为 Jersey,但还有其他的(即 RESTEasy)。就像丰田以外的许多其他制造商可能会使用这些设计来制造自己的汽车一样。【参考方案5】:JAX-RS 是一个规范(只是一个定义),Jersey 是一个 JAX-RS 实现。
【讨论】:
所以 jax-rs 说我们应该做什么,而 jersey 做呢?这是有道理的,但为什么有 jax-rs 库?? 例如:JAX-RS 为您提供了一组由 Jersey 实现的接口(标准 Java 接口)。因此需要一组接口(或类)作为要实现的依赖项。 嗯,这是有道理的......但是,我们总是需要其他类来实现 jax-rs,对吧?像这个,球衣.. 没错。即 JAX-RS 为您提供 javax.ws.rs.core.Request 接口,Jersey 在 com.sun.jersey.spi.container.ContainerRequest 中实现它 这是否与 JPA 作为规范和 hibernate 作为其实现之一相同?以上是关于Jersey 与 jax-rs 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
Jersey 框架如何在 REST 中实现 JAX-RS API?