资讯专栏INFORMATION COLUMN

JAX-RS 2.0 中 REST 的四种服务类型

bbbbbb / 2490人阅读

摘要:当不存在子类,也不存在子类时,规范中定义,在这种情况下,为服务动态生成一个名为的实例,并自动探测匹配资源。其中是中的基类,它继承于情况二当不存在子类,但是存在子类时。以上就是规范中定义的四种服务的方式。

最近在学习 jersey 框架。他是 目前比较流行的 基于 JAX-RS 2.0 规范实现的 RESTful 框架。

我是跟着 《Java RESTful Web Service 实战》 一书 在学习。书中有些知识点,不太常用,但是比较重要,特写下次笔记已备忘。

概要

如下图:

情况一:当不存在 Application 子类,也不存在 Servlet 子类时

情况二:当不存在 Application 子类,但是存在 Servlet 子类时

情况三:当存在 Application 子类,而且 Application 子类被 ApplicationPath 注解所修饰。

情况四:当存在 Application 子类,但是没有被ApplicationPath 注解所修饰。


此图来自于《Java RESTful Web Service 实战》

描述

情况一

以下xml代码是 servlet 容器的 web.xml 中的 去除 的子元素。

当不存在 Application 子类,也不存在 Servlet 子类时,规范中定义,在这种情况下,为REST服务动态生成一个名为 javax.ws.rs.core.Application 的 Servlet 实例,并自动探测匹配资源。与此同时,需要根据Servlet的不同版本,在web.xml定义REST请求处理的Servlet为这个动态生成的Servlet.

</>复制代码

  1. xml
  2. javax.ws.rs.core.Application
  3. javax.ws.rs.core.Application
  4. /webapi/*

</>复制代码

  1. xml
  2. Jersey Web Application
  3. org.glassfish.jersey.servlet.ServletContainer
  4. jersey.config.server.provider.packages
  5. com.example
  6. 1
  7. Jersey Web Application
  8. /webapi/*

通过 Servlet2.x 中 web.xml 的配置项,可以看出,jersey-container-servlet-core 不具备自动扫描资源类的功能。

其中 org.glassfish.jersey.servlet.ServletContainer 是 jersey 中 Servlet的基类,它继承于 HttpServlet

情况二

当不存在 Application 子类,但是存在 Servlet 子类时。

</>复制代码

  1. java// Servlet3.x 中 一个 Servlet 定义
  2. @WebServlet(
  3. initParam = @WenInitParam(name = "jersey.config.server.provider.packages", value="com.example"),
  4. urlPatterns="/webapi/*",
  5. loadOnStratup = 1
  6. )
  7. public class AirServlet extends ServletContainer {
  8. }

以上是 基于 Servlet3.x 的 REST 服务。在 Servlet3.x 的场景下,可以省略 web.xml 文件。但是 Servlet 项目中如果没有 web.xml 的话,在使用 maven 发布war 的时候会报错,所以需要设置 maven-war-plugins

</>复制代码

  1. xml
  2. org.apache.maven.plugins
  3. maven-war-plugin
  4. 2.3
  5. false

情况三:
当存在 Application 子类,而且 Application 子类被ApplicationPath注解所修饰。

</>复制代码

  1. java@ApplicationPath("/webapi/*")
  2. public class AirApplication extends Application {
  3. @Override
  4. public Set> getClasses() {
  5. final Set> classes = new HashSet>();
  6. classes.add(BookResource.class);
  7. return classes;
  8. }
  9. }

也可以使用,packages 方法 会扫描所有的资源类。

</>复制代码

  1. java@ApplicationPath("/webapi/*")
  2. public class AirResourceConfig extends ResourceConfig {
  3. public AirResourceConfig() {
  4. packages("com.example");
  5. }
  6. }

情况四:
当存在 Application 子类,但是没有被 ApplicationPath 注解所修饰

我们需要先 定义一个 Application 子类,已完成 Servlet 的配置。

</>复制代码

  1. javapublic class AirApplication extends Application {
  2. @Override
  3. public Set> getClasses() {
  4. final Set> classes = new HashSet>();
  5. classes.add(BookResource.class);
  6. return classes;
  7. }
  8. }

</>复制代码

  1. xml
  2. Jersey Web Application
  3. org.glassfish.jersey.servlet.ServletContainer
  4. javax.ws.rs.Application
  5. com.example.AirApplication
  6. 1
  7. Jersey Web Application
  8. /webapi/*

以上配置,可以生效与 Servlet2.x 版本中。我们可以 利用 Servlet3.x 的特性来简化这些设置。

</>复制代码

  1. xml
  2. com.example.AirApplication
  3. com.example.AirApplication
  4. /webapi/*

以上就是 JAR-RS 规范中定义的四种 REST 服务的方式。

以上文字片段以及图片,部分来自于 《Java RESTful Web Service 实战》一书。如有版权侵犯,请联系邮箱[ychangsheng@gmail.com]。本人及时修改。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64236.html

相关文章

  • jersey 框架传输格式 (2) xml

    摘要:作为日常开发中一种常用的传输格式。对应的,定义了三种标准类型的输入接口和输出接口,。实体类如果请求的传输数据量很大,并且无需和外系统对接的场景,建议使用属性来组织,这样可以极大的减小格式的数据包的规模。如有版权侵犯,请联系邮箱。 XML作为日常开发中一种常用的传输格式。jersey 也做了很优秀的支持。 我学习 《Java RESTful Web Service 实战》 一书。书中有...

    betacat 评论0 收藏0
  • jersey 框架传输格式 (2) xml

    摘要:作为日常开发中一种常用的传输格式。对应的,定义了三种标准类型的输入接口和输出接口,。实体类如果请求的传输数据量很大,并且无需和外系统对接的场景,建议使用属性来组织,这样可以极大的减小格式的数据包的规模。如有版权侵犯,请联系邮箱。 XML作为日常开发中一种常用的传输格式。jersey 也做了很优秀的支持。 我学习 《Java RESTful Web Service 实战》 一书。书中有...

    The question 评论0 收藏0
  • Dubbo Cloud Native 实践与思考

    摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 Dubbo Cloud Native 实践与思考 分享简介 Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Foundation)项目蓬勃发展之际。Dubbo...

    邱勇 评论0 收藏0
  • Day 13: Dropwizard —— 非常棒的Java REST服务器栈

    摘要:现在可以通过点击指标检查的指标,该数据是可用的格式。健康检查被添加。现在启动,可以看到第步创建现在写类,它负责创建博客条目。为了测试,做一个请求第步更新现在,更新方法来从获取所有的博客文件。 编者注:我们发现了比较有趣的系列文章《30天学习30种新技术》,准备翻译,一天一篇更新,年终礼包。下面是第十三天的内容。 我已经是一个使用了8年Java的软件开发人员了,我写过的大多数应用程...

    Awbeci 评论0 收藏0
  • 记录第一次搭建基于JAX-RSREST风格DEMO

    摘要:中引入了模块的概念,默认情况下,中将不再包含的包,而在时关于这个都是捆绑在一起的。 因为是初学REST风格,所以并不打算马上就用springMVC这些框架去实现restful,所以先用jersey搭建一个rest的demo上手玩玩,本文记录了搭建所需要引入的jar包,以及搭建过程碰到的坑,希望能让大家有所收获,欢迎交流! 1、Maven jar包引入 ...

    ybak 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<