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实现?
- RequestDispatcher.forward()和HttpServletResponse.sendRedirect()之间有什么区别?
- iText pdf在使用NOTO字体或Source Hans时不显示中文字符
- ZooKeeper for Java / Spring Config?
- JList选择项目为String
- Javamultithreading客户端/服务器 – java.net.SocketException:Socket已关闭
- 如何通过Java applet上传文件?
- 忽略IntelliJ中的Java .class文件导航到文件对话框?
- 是否有必要关闭FileWriter,前提是它是通过BufferedWriter编写的?
- 每小时一次玻璃鱼全gc