Tomcat 是否立即支持 JAX-RS(它是否支持 JAX-RS)?

2024-04-24

从教材《RESTful Java with JAX-RS》中我们可以读到:

如果我们的应用程序服务器是 JAX-RS 感知的,或者换句话说,与 JAX-RS 紧密集成,则声明我们的ShoppingApplication作为 servlet 的类:

<?xml version="1.0"?>
<web-app>
  <servlet>
    <servlet-name>Rest</servlet-name>
    <servlet-class>
      com.restfully.shop.services.ShoppingApplication
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Rest</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app> 

如果我们的应用程序服务器不支持 JAX-RS,则您必须指定处理 JAX-RS 调用的 JAX-RS 提供者的 servlet。应将 Application 类指定为 servlet 的 init-param:

现在我的问题是:Tomcat 是一个支持 JAX-RS 的 Servlet 容器吗?如何区分支持 JAX-RS 的 servlet 容器和不支持 JAX-RS 的 servlet 容器?为什么在第一种情况下可以使用扩展的自定义类javax.ws.rs.core.Application作为 Servlet?


“Tomcat 是一个支持 JAX-RS 的 Servlet 容器吗?”

No.

“如何区分支持 JAXRS 的 servlet 容器和不支持 JAX-RS 的 servlet 容器?”

事实上,这只是一个 Servlet 容器,应该告诉您它是not“JAX-RS 感知”。 JAX-RS 是 Java EE 规范的一部分。 Servlet 容器完全支持其名称所暗示的功能; Servlet 的容器。他们可能支持其他小功能,例如 JSP,但不会支持整个 EE 规范。这不是他们设计的一部分。如果你想在Servlet容器中使用JAX-RS,你需要添加一个实现,比如Jersey https://eclipse-ee4j.github.io/jersey/ or Resteasy https://resteasy.github.io

当您提到 Servlet 容器时,您会想到 Jetty、Tomcat、Undertow、Grizzly 等服务器。如果您想要完整的 Java EE 支持,那么您需要获得一个支持整个规范的实际 Java EE 应用服务器,例如 JBoss/Wildfly、Glassfish、TomEE、WebSphere、WebLogic。

“为什么在第一种情况下可以使用扩展 javax.ws.rs.core.Application 作为 Servlet 的自定义类?”

我无法使用 Glassfish 4.0 或 Wildfly 8.1 生成工作示例,也没有在JAX-RS规范 https://jsr311.java.net/nonav/releases/1.1/spec/spec.html。在 Glassfish 中,我会得到一个例外ShoppingApplication不是 Servlet,在 Wildfly 中我只会得到一个NotFoundException,这意味着应用程序从未加载。

我能找到的最接近书中所述的内容是将应用程序类的名称指定为<servlet-name> (which isJAX-RS 规范的一部分,但完全不依赖于部署到 Java EE 服务器)

<servlet>
    <servlet-name>com.restfully.shop.services.ShoppingApplication</servlet-name>
</servlet>
<servlet-mapping>
    <servlet-name>com.restfully.shop.services.ShoppingApplication</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

这是来自 JAX-RS 规范

If an Application存在未被现有 servlet 处理的子类,则由该 servlet 添加的 servletContainerInitializer必须以完全限定名称命名Application子类。

  • Read JAX-RS 规范 - 发布 - 2.3.2 Servlet https://jsr311.java.net/nonav/releases/1.1/spec/spec.html有关标准 JAX-RS 部署选项的完整规范。任何其他未指定的部署/配置选项都是特定于实现的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat 是否立即支持 JAX-RS(它是否支持 JAX-RS)? 的相关文章

随机推荐

  • magento从产品sku获取产品类型

    我如何使用产品 sku 或 id 获取产品类型 简单 可配置 分组 我已加载产品集合并从中尝试通过 product gt getTypeId 但它不打印产品类型 请帮我 Thanks I think product gt getTypeId
  • ANTLR 嵌套函数

    ANTLR 适合这个项目吗 我正在寻找处理和转换用户输入的字符串 其中可能包含自定义函数 例如 用户可能会在字符串中写入类似 CAPITALIZE word 的内容 而我想执行 使用 StringUtils 在后台进行实际转换 我想用户有时
  • 查询返回的结果多于预期

    请耐心等待 这并不是我真正的问题 只是想让别人理解 作者注 The 可能重复 https stackoverflow com questions 4966203 mongo query question gt lt问题解决方案允许 elem
  • ggplot 中十分位数的低、中高颜色

    我想使用 ggplot 绘制多边形类型的空间图 其中绘制多边形 多边形的颜色由其权重决定 示例数据框看起来像 这是数据文件完整的数据文件 https dl dropboxusercontent com u 55346033 sampleDa
  • Gmail 邮件可以通过 API 存档吗?

    似乎无法使用 API 来存档邮件 在 Web 界面中归档涉及moving 而不是labeling发送至 所有邮件 的消息 API 不仅没有列出 所有邮件 标签 而且move也失踪了 只有modify这仅允许在消息中添加或删除标签 这很奇怪
  • 保护 Azure 云服务配置中的敏感信息

    我们正在使用云服务配置 https learn microsoft com en us previous versions azure reference jj156212 v 3Dazure 100 存储应用程序设置 但我们想保护一些应用
  • 电子邮件安全:TLS 和 S/MIME

    我的理解是 TLS 是一种加密技术 允许两个 STMP 服务器安全地相互通信 如果使用 HTTPS 连接到 STMP 服务器 与使用 S MIME 相同吗 不会 TLS 会对通信通道进行加密 S MIME 对消息进行加密 也就是说 这就是
  • System.Web.Security.FormsAuthentication.Encrypt 返回 null

    我正在尝试加密一些 userData 以使用 Forms 身份验证创建我自己的自定义 IPrincipal 和 IIdentity 对象 我已将代表我登录用户的对象序列化为 Json 并创建了我的 FormsAuthentication 票
  • C++:用 istream 包装 vector

    我想包一个vector
  • Eclipse 中的默认导入

    有没有办法自定义 Eclipse 中的默认导入 例如 如果我默认打开一个新的 JUnit 测试类 我会得到以下导入 import static org junit Assert import org junit Test 我想得到什么 im
  • 无法创建“匿名类型”类型的常量值。此上下文中仅支持基本类型或枚举类型

    我对linq和实体框架 我正在尝试解决以下问题为何不起作用的问题 产生的错误是 无法创建 匿名类型 类型的常量值 在此上下文中仅支持原始类型或枚举类型 我已经尝试了很多不同的方法 但仍然收到与原始类型相关的错误 如果有人能看一下下面的代码并
  • 如何让 Maven 发出有关传递依赖版本不匹配的警告?

    在下面的 Maven 依赖项示例中 slf4j 依赖项想要引入 log4j 1 2 17 log4j 显式依赖项想要引入 1 2 15 Maven 将 log4j 解析为版本 1 2 15 但是 Maven 没有打印出 sl4j 需要更高版
  • 通过动画将视图的可见性从消失变为可见

    我有一个观点是invisible默认情况下 只是第一次 现在我需要将可见性切换为VISIBLE有了这个animation if myView getVisibility View INVISIBLE myView setVisibility
  • Http 请求的加载指示器

    我的问题的根源是在 http 请求上显示加载指示器 我想在服务级别上执行此操作 而不必为每个组件编写代码 我所做的是实现一个 http 包装器 它基本上执行以下操作 getMyHttpObservable setLoadingIndicat
  • 具有 Azure Key Vault 的本地 ASP.NET Framework Web 应用程序

    我们正在尝试保护内部 ASP NET Framework Web 应用程序中的应用程序机密 向我提供的最初计划是使用 Azure Key Vault 我开始使用我的 Visual Studio Enterprise 订阅进行开发工作 并且在
  • Laravel,获取当前登录的用户

    我想在应用程序中显示当前登录用户的列表 我想使用 Laravel Auth 方法 我正在查看 API 但找不到类似的东西 我可能需要循环访问会话存储 然后将其与用户 ID 匹配 我对吗 更新 忘了提及 我将会话存储在数据库中 当前登录 是普
  • 为字符串数组分配内存

    我想使用两个函数填充一个字符串数组 第一个 如果我有n个字符串要分配 将分配n个内存空间 第二个将为每个读取的字符串分配内存 这是第一个函数 char allocate int n char t t char malloc n sizeof
  • 数据透视表:检测数据透视字段何时折叠

    对于数据透视表中显示的数据 我选择对数据表的某些部分应用条件格式以突出显示某些范围内的值 弄清楚如何以不同于小计数据的方式突出显示第二级行数据很有趣 但我能够解决它 我的 VBA 使用以下命令触发Worksheet PivotTableUp
  • Google / OAuth 2 - 自动登录

    我正在尝试结合一些 Google API 来使用 OAuth 2 0 虽然授权过程非常简单 但在初始授权完成后 我遇到了自动授权的问题 So 1 Authorization is done for the first time user g
  • Tomcat 是否立即支持 JAX-RS(它是否支持 JAX-RS)?

    从教材 RESTful Java with JAX RS 中我们可以读到 如果我们的应用程序服务器是 JAX RS 感知的 或者换句话说 与 JAX RS 紧密集成 则声明我们的ShoppingApplication作为 servlet 的