Java Tomcat是否支持JAX-RS开箱即用(是否支持JAX-RS)?
从教科书“带JAX-RS的RESTful Java”中,我们可以读到: 如果我们的应用服务器支持JAX-RS,或者换句话说,与JAX-RS紧密集成,那么将我们的Java Tomcat是否支持JAX-RS开箱即用(是否支持JAX-RS)?,java,rest,tomcat,web,jax-rs,Java,Rest,Tomcat,Web,Jax Rs,从教科书“带JAX-RS的RESTful Java”中,我们可以读到: 如果我们的应用服务器支持JAX-RS,或者换句话说,与JAX-RS紧密集成,那么将我们的ShoppingApplication类声明为servlet: 休息 com.restfuly.shop.services.ShoppingApplication 休息 /* 如果我们的应用服务器不支持JAX-RS,则必须指定处理JAX-RS调用的JAX-RS提供程序的servlet。应用程序类应指定为servlet的init参数:
ShoppingApplication
类声明为servlet:
休息
com.restfuly.shop.services.ShoppingApplication
休息
/*
如果我们的应用服务器不支持JAX-RS,则必须指定处理JAX-RS调用的JAX-RS提供程序的servlet。应用程序类应指定为servlet的init参数:
现在我的问题是:Tomcat是一个JAX-RS感知的Servlet容器吗?如何区分支持JAX-RS的servlet容器和不支持JAX-RS的servlet容器?为什么在第一种情况下,可以将扩展了javax.ws.rs.core.Application
的自定义类用作Servlet
“Tomcat是JAX-RS感知的Servlet容器吗?”
没有
“如何区分支持JAX-RS的servlet容器和不支持JAX-RS的servlet容器?”
事实上,它只是一个Servlet容器,应该告诉您它不是“JAX-RS感知的”。JAX-RS是JavaEE规范的一部分。Servlet容器完全支持其名称的含义;servlet的容器。他们可能支持JSP等其他小功能,但不支持整个EE规范。这不是他们设计的一部分。如果希望在Servlet容器中使用JAX-RS,则需要添加一个实现,如或
当你提到Servlet容器时,你会想到像Jetty、Tomcat、Undertow和Grizzly这样的服务器。如果您想要完全支持JavaEE,那么您需要获得一个支持整个规范的实际JavaEE应用服务器,比如JBoss/Wildfly、Glassfish、TomEE、WebSphere和WebLogic
“为什么在第一种情况下,可以将扩展javax.ws.rs.core.Application的自定义类用作Servlet?”
我无法使用Glassfish 4.0或Wildfly 8.1生成一个工作示例,也没有在文档中指定此示例。在Glassfish中,我会得到一个关于ShoppingApplication
不是Servlet的异常,而在Wildfly中,我只会得到一个NotFoundException
,这意味着应用程序永远不会加载
我能找到的最接近本书所述内容的是将应用程序类的名称指定为
(这是JAX-RS规范的一部分,但完全不依赖于部署到JavaEE服务器)
com.restfuly.shop.services.ShoppingApplication
com.restfuly.shop.services.ShoppingApplication
/原料药/*
这来自JAX-RS规范
如果存在未由现有servlet处理的应用程序
子类,则必须使用应用程序
子类的完全限定名来命名由容器初始化器
添加的servlet
- 请阅读有关标准JAX-RS部署选项的完整规范。未指定的任何其他部署/配置选项都是特定于实现的
<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>