Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat是否支持JAX-RS开箱即用(是否支持JAX-RS)?_Java_Rest_Tomcat_Web_Jax Rs - Fatal编程技术网

Java Tomcat是否支持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参数:

从教科书“带JAX-RS的RESTful Java”中,我们可以读到:

如果我们的应用服务器支持JAX-RS,或者换句话说,与JAX-RS紧密集成,那么将我们的
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部署选项的完整规范。未指定的任何其他部署/配置选项都是特定于实现的

AFAIK tomcat只是一个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>