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

据我所知,java EE应用服务器主要有两种类型的容器。 即Web容器和EJB容器。

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

tomcat是否使用除Jersey之外的其他JAX-RS实现? 如果是的话是什么?

如果不,

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

“tomcat是否使用除Jersey之外的其他JAX-RS实现?”

我不知道你是否在询问Tomcat是否有实现,或者它是否能够在Jersey旁边运行其他实现。

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

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

“如果没有捆绑到war文件中的jar,我就无法运行Jax-RS应用程序”

是的,你不能。 简单来说,没有实现来支持JAX-RS运行时。

“这意味着它们不会在Web容器中运行。然后它在哪个容器中运行?”

它确实在Servlet容器中运行。 JAX-RS实际上是建立在Servlets之上的。 对于Jersey,它使用ServletContainer 。 Tomcat将向Jersey Servlet发送请求,Jersey将通过配置的提供者和资源处理请求,并将响应吐出回容器。 容器将响应发送给客户端。 (见下面的第一个链接)


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


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

  • 使用JAX-RS混淆了JAX-RS和Jersey
  • JAX-RS规范 – 2.3出版物
  • 带有IntelliJ和Tomcat的Java-ee REST服务器
  • 如何在不使用web.xml的情况下将Jersey用作JAX-RS实现?