我发现这个问题的答案相互矛盾,但我没能成功运行一个例子.
JAX-RS是否可以使用带注释的Servlet 3.0(特别是Tomcat 7)实现,而无需实现另一个Servlet容器?
如果不是,请解释为什么本书中的以下引用是,不正确或我正在解释它,错误.
因为此示例在Java EE应用程序服务器或独立的Servlet 3.x容器中部署,所以我们只需要一个空的web.xml文件.服务器将检测到Application类在WAR中并自动部署它.(使用JAX-RS 2.0的RESTful Java,Bill Burke)
为了澄清什么,我也不需要.我曾成功地使用一个web.xml实现JAX-RS在Tomcat的7新泽西州的帮助,所以,我并不需要怎么做任何解释.另外,我完全清楚其他Java EE/Servlet容器(TomEE,Glassfish,Jersey,Websphere等等)都是开箱即用的JAX-RS.我只需要知道我是否正在追逐我的尾巴试图让Tomcat 7(Servlet 3.0)与JAX-RS一起工作而不添加Servlet容器和没有web.xml条目.
在Servlet环境中,Jersey作为servlet或servlet过滤器运行.没办法解决这个问题.那么如果不在web.xml中声明它,它是如何工作的呢?此功能的两个主要组件
Servlet组件(即servlet和fitler)的编程注册.你可以进行谷歌搜索,你应该找到一些例子.
Servlet 3.x中引入的Servlet可插拔性.它是如何工作的是你ServletContainerInitializer在一个名为的文件中实现a ,列出该实现javax.servlet.ServletContainerInitializer,并将该文件放在META-INF/servicesjar 的目录中.servlet容器应该扫描查找此文件的jar.当它找到时,它会看到实现,找到实现,实例化它,然后调用它的onStartup方法.
泽西岛的这种实现SevletContainerInitializer的JerseyServletContainerInitializer.这个类位于jersey-container-servletjar中.所以你需要这个罐才能工作.如果你看一下这个方法,你可以在这里看到程序注册ServletContainer(你将在web.xml中声明的那个)
但那还不是全部.我们仍然需要一些配置应用程序的方法,至少要声明servlet映射.这就是Application类和@ApplicationPath注释的用武之地.我们将扩展Application类并注释@ApplicationPath("/path")where "path"与web.xml中的servlet映射相同
@ApplicationPath("/api")
public class MyApplication extends Application {}
Run Code Online (Sandbox Code Playgroud)
这是标准的JAX-RS.通常使用Jersey而不是Application类,我们使用一个ResourceConfig类(它是一个子类Application)
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("package.to.scan");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看 Servlet 3.x环境中有关Jersey部署选项的更多信息.
还应该注意,Java EE服务器具有JAX-RS实现,因此我们只需要将javaee-api jar添加到我们的应用程序中作为提供的依赖项.但是在servlet容器中,我们需要提供自己的实现,Jersey就是这样一个实现.
如果你使用的是Maven,那么你需要的主要依赖是这个
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey2.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这将拉出一堆其他的罐子.你没有使用Maven,那么你可以在这里下载所有的罐子(JAX-RS 2.0 RI包),并将所有这些放入你的应用程序中.
也可以看看:
| 归档时间: |
|
| 查看次数: |
2596 次 |
| 最近记录: |