据我了解,Java EE应用程序服务器主要有两种类型的容器。即Web容器和EJB容器。
我设法在Tomcat中运行一个使用Jersey作为其实现的JAX- RS应用程序。据我所知,Tomcat只是一个Web容器。为了在tomcat中运行Web服务,必须将球衣罐捆绑到war文件中,因为开箱即用,Tomcat没有球衣罐。这给我提出了一个问题。
tomcat是否使用Jersey以外的其他JAX-RS实现?如果是,那是什么?
如果不,
没有将jar捆绑到war文件中,我无法运行Jax-RS应用程序,这意味着JAX- RS应用程序需要的东西比Web容器提供的东西还多。这意味着它们不会在Web容器中运行。那么它在哪个容器中运行?
“ tomcat是否使用Jersey以外的其他JAX-RS实现?”
我不知道您是否要询问Tomcat是否具有实现,或者它是否能够运行Jersey之外的其他实现。
前者的答案是否定的。VanillaTomcat不支持开箱即用的JAX-RS。它不是EE服务器,而只是一个Servlet容器。但是TomEE+(基于Tomcat构建)具有支持(使用CXF)。
后者的答案是肯定的。您只需要添加实现jar并正确配置应用即可
“如果没有将jar捆绑到war文件中,我将无法运行Jax-RS应用程序”
是的,你不能。出于简单的事实,没有实现支持JAX-RS运行时。
“这意味着它们不在Web容器中运行。那么它在哪个容器中运行?”
它确实在Servlet容器中运行。JAX-RS实际上是建立在Servlet之上的。对于Jersey,它使用ServletContainer。Tomcat将请求发送到JerseyServlet,Jersey将通过配置的提供程序和资源处理请求,并将响应吐回容器。容器将响应发送给客户端。(请参见下面的第一个链接)
ServletContainer
如果您正在寻找支持整个EE规范的JavaEE应用服务器,则可以查看Glassfish(它使用Jersey作为其实现),JBoss /Wildfly(它使用Resteasy),上面提到的TomEE +(使用CXF)