Java RESTful Web Service实战(第2版) 1.4 Jersey项目概要

简介:

1.4 Jersey项目概要

Jersey是JAX-RS标准的参考实现,是Java领域中最纯正的REST服务开发框架。本节将带读者走近Jersey的世界。

Jersey项目是GlashFish项目的一个子项目,专门用来实现JAX-RS(JSR 311 & JSR 339)标准,并提供了扩展特性。

1.4.1 获得Jersey

Jersey项目的地址是https://jersey.java.net。该网站同时提供了JAX-RS和JAX-RS2两个并行版本,分别是JAX-RS1.1(截至本书发稿,最新版本是Jersey1.19)和JAX-RS2(截至本书发稿,最新版本是Jersey2.22.1)。读者可以通过单击latest Jersey User Guide获取和阅读最新版本的用户手册,这是官方发布的第一手参考资料。

Jersey项目的下载地址http://jersey.java.net/download.html。该页面自上而下的内容分别如下。

JAX-RS标准列表链接(JAX-RS 2.0 API)。

Jersey最新参考实现的jar包下载(Jersey JAX-RS 2.0 RI bundle)。

Jersey最新参考实现的示例代码下载(Jersey 2.22.1 Examples bundle)。

通过Maven模板(archetype),使用Jersey最新版本创建REST服务的命令。

Jersey最新参考实现的模块和依赖(Jersey 2 modules and dependencies)。

JAX-RS1.1的参考实现包下载。

Jersey源代码的托管地址是https://github.com/jersey/jersey,我们可以通过git命令,将Jersey主干代码迁出到本地。示例如下。

git clone https://github.com/jersey/jersey.git

1.4.2 Jersey问答

StackOverflow是专业的程序员问答系统,Jersey的问题列表地址是:http://stackoverflow.com/questions/tagged/jersey。该链接在Jersey官网首页底部被列出,可见Jersey对问答系统的重视。另外,邮件列表也是一种知识共享的途径,读者可以自行订阅,地址是:https://jersey.java.net/mailing.html。

1.4.3 Jersey项目管理

Jersey使用JIRA作为项目管理平台,相应的地址是:https://java.net/jira/browse/JERSEY。JIRA和StackOverflow不同的是,JIRA平台是Jersey团队日常开发的管理平台,即Jersey官方的缺陷管理平台,用于上报缺陷和改进意见,而不是社区性质的交流平台。通过这个平台我们可以从中了解到Jersey项目的进展情况。Jersey是一个非常活跃的项目,不仅可以从github源代码的提交活动中看到该项目频繁的更新,在JIRA中也可以看到该项目推进的速度。

这里为喜欢开源社区活动的读者举个例子。在撰写本书第1版的开始,Jersey2.0并不支持与Spring的集成,因为Jersey的IoC容器由GlashFish的另一个子项目HK2来支持。随后,我在JIRA上发现一个Jersey2.x支持与Spring集成的任务被创建了(https://java.net/jira/browse/JERSEY-1957),此后我经常观察其进展状态,最终看到了这个功能在Jersey2.2中以扩展包的形式发布了。

因此,在使用Jersey的过程中,如果读者遇到Jersey本身的问题,可以跟踪Jersey的JIRA平台检索、查看Bug的修复状态,包括将在哪个版本修复,有什么样的临时解决办法(workaround)。同时,跟踪JIRA也可以了解新版本的发布情况,包括新增哪些功能,升级对哪一部分带来性能、安全的提升等。换句话说,JIRA展示了Jersey项目的缺陷修复和新功能发版的计划(roadmap)。

1.4.4 Jersey许可

开发者使用开源软件的前提是了解它的许可证版本,否则可能会带来侵权问题。相信在正规的公司,大家都有被开发管理部门的人“恐吓”的经历。开发者需感谢这样的团队所做的工作,他们为公司规避了商业侵权的风险,因为引用的源代码如果出自“传染性”许可,该项目是不能用于闭源的商业用途的。

Jersey的许可证说明地址是:https://jersey.java.net/license.html。从中我们可以了解到Jersey使用的是双许可证:CDDL(Common Development and Distribution License,开源通用开发和分发许可证)1.1和GPLv2(类路径例外)许可证。双重许可是依照两套(或更多套)不同的条款和条件分发相同软件的作法。在为软件授予双重许可时,接收人可以选择他们希望依照哪种条款获得软件。使用双重许可的两个常见动机是遵循商业模式和保持许可证兼容性。GPLv2.0许可证为无法依照CDDL许可证使用Jersey的供应商提供了一个额外选项。Jersey许可证使整套产品和包保持一致(GlassFish项目同样依照CDDL和GPLv2(类路径例外)授予双重许可)。

阅读指南

类路径例外是由自由软件基金会的GNU/类路径项目制订的。它允许将依照任何许可证提供的应用程序链接到依照GPLv2许可的软件中包含的库,而该应用程序不受GPL要求公开其本身的限制。

为什么需要使用类路径例外?因为作为“基于GPL程序的作品”的一部分提供的所有代码还应获得GPL许可。因此,需要指定GPL许可证例外的情况,以便明确将链接到GPL实现的任何应用程序从该许可要求中排除。类路径例外就实现了这一目的。

1.4.5 Jersey的模块

Jersey框架是由核心模块、容器模块、连接器模块、Media模块、扩展模块、测试框架模块、安全模块以及Glassfish Bundle模块等8个大的模块组成。详情请读者浏览官方文档:https://jersey.java.net/documentation/latest/modules-and-dependencies.html。

Jersey核心模块包括3个子模块,分别是通用包、服务器端实现包和客户端实现包。Jersey提供了3种HTTP容器,分别是Grizzly2、JDK-HTTP和SIMPLE-HTTP,Grizzly2同时提供了Servlet容器。Jersey客户端底层依赖于连接器来实现网络通信,如果标准的客户端模块功能不能满足业务需求,读者可以考虑引入Grizzly连接器包或者Apache连接器包。

阅读指南

Jersey在2.6版本做了一次包重构,清除了对guava和ASM的自然依赖。如果你的项目需要做Jersey版本迁移,则需要注意这一点。新的包名为:jersey.repackaged.com.google.common和 jersey.repackaged.objectweb.asm。

1.4.6 GlashFish项目

GlashFish项目地址为https://glassfish.java.net。GlashFish著名于世的是Java EE服务器项目Oracle GlassFish Server,该项目还同时包含Java EE中的一系列标准规范的参考实现,这些参考实现集成于GlashFish Server,为其Java EE容器提供支持。其中对应JAX-RS2的实现项目是Jersey。

为什么要在JAX-RS2的介绍中提及和罗列GlashFish项目集呢?因为Jersey处于GlashFish生态环境中,GlashFish又是Java EE生态环境的参考实现。通过了解GlashFish项目,我们可以更好地设计和实现REST服务。

这里所列的项目是除Jersey以外,其他的GlashFish项目,排列顺序并不严谨,大体上以其与Jersey的紧密关系降序排列。

HK2项目:JSR-330参考实现,项目地址为http://hk2.java.net。HK2是轻量级DI架构,实现IoC和DI的内核。是Jersey实现容器内管理Bean的基础。

Grizzly项目:中文直译为灰熊。JSR-356参考实现,项目地址为https://grizzly.java.net。Grizzly是一个异步IO的、高效而健壮的服务器,可以被用作HTTP服务器、Servlet容器,支持Ajp、Comet、WebSocket以及相对于RESTful的另一种Web Service实现(JAX-WS)。

EclipseLink项目:该项目实现了多个JSR标准,包括JSR-338/JPA2.1、JSR-222/JAXB2.2、JSR-235/SDO2.1.1、JSR-353/Java API for Processing JSON。项目地址为http://www.eclipse.org/eclipselink。EclipseLink是JPA2.1的一个实现,同时它还实现了其他的JSR作为扩展。JPA2.1是Java EE 7的成员,是对JSR317(JPA2.0)的升级。JPA2.1的实现中,最常用的是JBoss的Hibernate,该项目从4.3开始实现JPA2.1。也就是说Hibernate4.2是JPA2.0的最后一个版本。读者在开发的时候要注意依赖项目版本对标准的支持。JPA标准还有其他的实现,请参考http://en.wikipedia.org/wiki/Java_Persistence_API。

Metro项目:该项目是JSR中多个标准的官方实现集,目的是实现全栈式的Web Service。包括JSR-224/JAX-WS 2.2、JSR-222/JAXB2.2、JSR-206/JAXP 1.4.6、JSR-067/SAAJ1.3。项目地址为https://metro.java.net。Metro项目中的多个标准作用各有不同。

JAX-WS标准结合了XML-RPC,使用SOAP协议来实现Web Service。在JAX-WS的实现中,不可不提的另外两个实现分别是Apache的CXF和Axis。

WSIT的前身是Tango,是一种JAX-WS和.NET互操作的技术,实现了WS*标准。

SAAJ规范的作用是基于SOAP协议XML格式传递带附件的SOAP消息。

JAXP标准涵盖了Java对XML过程式处理的诸多技术,包括DOM、SAX和StAX,同时该标准定义了解读XML样式的XSLT。

JAXB标准是Java处理XML和POJO映射的技术,是Jersey中处理传输数据的重要依赖。

Open MQ项目:地址https://mq.java.net。Open MQ是JMS 2.0的参考实现。JSR-343是Java EE 7的成员,旨在简化JMS的API。关于消息队列的实现数量,恐怕是其他任何一个标准都望尘莫及的。几乎每一个有能力开发服务器软件、中间件的公司都有自己的MQ,请参考http://en.wikipedia.org/wiki/Message_queue。

Mojarra项目:JSR-344/JSF2参考实现,项目地址为https://javaserverfaces.java.net。JSF是一种全栈式的、事件驱动的B/S开发模式框架,它包括浏览器端的丰富组件,服务器端覆盖Java EE的各种特性。JSF相对于Spring,借鉴了其核心思想IoC和AOP,同时给出了标准规范。这有点类似JPA借鉴了hibernate的O/R Mapping思想并标准化。JSF的另一个实现是Apache的myfaces,当前版本为2.0.18。另外,JBoss的RichFaces是基于JSF的扩展中最为完善和常用的。更多有关JSF的内容和原理,请参考笔者的拙作《JSF2和RichFaces4使用指南》。

OpenJDK项目:项目地址为http://openjdk.java.net。OpenJDK是开源的JDK,从版本1.7开始成为官方JDK的先行版本,因此是Java开发者窥探Java发展的第一线的最好资源,同时也是活跃的Linux发行版本Ubuntu和Fedora等默认安装的JDK版本。

阅读指南

当前使用的JDK版本号的升级规则是从JDK5.0发布开始的,Java升级发布一直采用两种方式发布更新。

有限升级(Limited Update)包含新功能和非安全修正。

重要补丁升级(Critical Patch Update,CPU)只包含安全修正。

有限升级发行序号为20的倍数,即一个偶数;重要补丁升级顺延上一个CPU的版本号加5的倍数并取奇数(必要时加1)。

举例来说,下一个有限升级的版本号为7u40,那么接下来的3个CPU版本号依次为40+5=7u45,45+5+1=7u51和51+5=7u55。再下一个有限升级的版本号为7u60,随后的CPU版本号依次为7u65、7u71和7u75。

这种命名规则会为重要补丁升级保留几个版本序号,以便新的CPU版本号可以取区间值之和而不是在最新版本号上顺延。

相关文章
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
745 4
|
存储 算法 安全
JWT深度解析:现代Web身份验证的通行证为什么现在都是JWT为什么要restful-优雅草卓伊凡
JWT深度解析:现代Web身份验证的通行证为什么现在都是JWT为什么要restful-优雅草卓伊凡
839 41
JWT深度解析:现代Web身份验证的通行证为什么现在都是JWT为什么要restful-优雅草卓伊凡
|
XML JSON API
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
1081 2
|
监控 负载均衡 API
Web、RESTful API 在微服务中有哪些作用?
在微服务架构中,Web 和 RESTful API 扮演着至关重要的角色。它们帮助实现服务之间的通信、数据交换和系统的可扩展性。
396 2
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
380 6
|
JSON API 数据格式
深度剖析!Python Web 开发中 RESTful API 的每一个细节,你不可不知的秘密!
在 Python Web 开发中,RESTful API 是构建强大应用的关键,基于 Representational State Transfer 架构风格,利用 HTTP 卞性能。通过 GET、POST、PUT 和 DELETE 方法分别实现资源的读取、创建、更新和删除操作。示例代码展示了如何使用 Flask 路由处理这些请求,并强调了状态码的正确使用,如 200 表示成功,404 表示未找到资源等。
275 5
|
存储 前端开发 API
告别繁琐,拥抱简洁!Python RESTful API 设计实战,让 API 调用如丝般顺滑!
在 Web 开发的旅程中,设计一个高效、简洁且易于使用的 RESTful API 是至关重要的。今天,我想和大家分享一次我在 Python 中进行 RESTful API 设计的实战经历,希望能给大家带来一些启发。
220 4
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
在Python的Web开发领域中,RESTful API是核心技能之一。本教程将从零开始,通过实战案例教你如何使用Flask框架搭建RESTful API。首先确保已安装Python和Flask,接着通过创建一个简单的用户管理系统,逐步实现用户信息的增删改查(CRUD)操作。我们将定义路由并处理HTTP请求,最终构建出功能完整的Web服务。无论是初学者还是有经验的开发者,都能从中受益,迈出成为Web开发高手的重要一步。
383 4