JAX-RS Web 服务在哪个容器中 运行?

In which container do JAX-RS web services run?

据我了解java EE 应用服务器主要有两种类型的容器。即web容器和EJB容器。

我设法 运行 在 Tomcat 中使用 Jersey 作为其实现的 JAX-RS 应用程序。据我所知 Tomcat 只是一个网络容器。为了 运行 tomcat 中的 Web 服务,必须将 jersey jar 捆绑到 war 文件中,因为开箱即用,Tomcat 没有 jersey jar .这让我提出了一个问题。

tomcat 是否使用 Jersey 以外的其他 JAX-RS 实现?如果是,那是什么?

如果否,

如果没有捆绑到 war 文件中的 jars,我无法 运行 Jax-RS 应用程序,这意味着 JAX-RS 应用程序需要比 Web 容器提供的更多的东西。这意味着它们不会 运行 在网络容器中。那么它在哪个容器中 运行?

"Does tomcat uses another implementation of JAX-RS other than Jersey?"

我不知道你问的是 Tomcat 是否有一个实现,或者它是否能够 运行除 Jersey 之外的其他实现。

前者的答案是否定的。 Vanilla Tomcat 不支持开箱即用的 JAX-RS。它不是 EE 服务器,而只是一个 Servlet 容器。但是 TomEE+(基于 Tomcat)有支持(使用 CXF)。

后者的答案是肯定的。您只需要添加该实现 jar 并正确配置应用程序

"I could not run the Jax-RS application without the jars bundled into the war file"

是的,你不能。对于简单的事实,没有实现支持 JAX-RS 运行time.

"It means they do not run in a web container. then in which container does it run?"

它在 Servlet 容器中 运行。 JAX-RS 实际上建立在 Servlet 之上。对于 Jersey,它使用 ServletContainer。 Tomcat 将向 Jersey Servlet 发送请求,Jersey 将通过配置的提供程序和资源处理请求,并将响应吐回容器。容器会将响应发送给客户端。 (先看下面link)


如果您正在寻找支持整个 EE 规范的 Java EE 应用程序服务器,您可以查看 Glassfish(它使用 Jersey 作为实现),JBoss/Wildfly(它使用 Resteasy ), 上面提到的TomEE+(使用CXF)


以下是一些您可能会感兴趣的相关读物: