JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器?
如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。
因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX-RS 2.0的RESTful Java,Bill Burke)
澄清我不需要帮助的事情...我已经使用web.xml在Tomcat7和Jersey中成功地实现了JAX-RS,因此,我不需要任何关于如何实现的解释。此外,我完全知道其他Java EE/servlet容器(TomEE、Glassfish、Jersey、Websphere等)所有的JAX-R都知道。我只需要知道我是否在穷追猛打,试图让Tomcat7(servlet3.0)在不添加Servlet容器和web.xml条目的情况下使用JAX-RS。
在Servlet环境中,Jersey作为Servlet或Servlet过滤器运行。没办法了。那么不在web.xml中声明它是如何工作的呢?该功能的两个主要组件
>
Servlet组件(即Servlet和fitler)的编程注册。你可以做一个谷歌搜索,你应该找到一些点击的例子。
Servlet 3.x中引入的Servlet可插拔性。它的工作方式是实现ServletContainerInitializer
,在名为javax.servlet.ServletContainerInitializer
的文件中列出该实现,并将该文件放在JAR的Meta-INF/Services
目录中。servlet容器应该扫描查找该文件的JAR。当它找到on时,它会看到实现,找到实现,实例化它,然后调用它onstartup
方法。
Jersey在JerseyServletContainerInitializer
中实现了SevletContainerInitializer
。这个类位于jersey-container-servlet
jar中。所以你需要这个罐子让它工作。如果查看这个方法,您将在这里看到ServletContainer
的编程注册(与yo在web.xml中声明的相同
但这还不是全部。我们仍然需要一些配置应用程序的方法,至少要声明servlet映射。这就是application
类和@applicationpath
注释的来源。我们将扩展application
类,并对@applicationpath(“/path”)
进行注释,其中“path”
与web.xml中的servlet映射相同
@ApplicationPath("/api")
public class MyApplication extends Application {}
这是标准的JAX-RS。对于Jersey类,我们通常不使用application
类,而是使用ResourceConfig
类(它是application
的子类)
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("package.to.scan");
}
}
您可以在这里看到关于Servlet3.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>
这会把一堆别的罐子拉进来。如果您没有使用Maven,那么您可以在这里下载所有的JAR(JAX-RS2.0RI包),并将它们放入您的应用程序中。
另见:
这是MyResource: 和我的web.xml: 在客户端,我使用这个url:http://localhost:8080/[projectname]/webapi/helloworld 谢了!
我做了一个使用JAX-RS(RESTfull服务)的简单项目 我有一个JAX-RS(RESTfull service)webservice项目,它部署到JBoss6.1中。默认情况下,JBoss6.1提供了与JSON集成的resteasy。我想更改默认JSON资源的日期格式。 null 没有被调用,我仍然得到默认的JSON日期格式。 即使在pom.xml下添加以下依赖项也没有帮助: 有人知道为什么
问题内容: 如何编写JAX-WS服务,以便我的@WebMethod的@WebParam是类似于DateTime的Joda- Time类?参数上的@XmlTypeAdapter是否可以工作?我正在部署到GlassFish 2.1。 让我澄清这个问题,因为到目前为止,这两个答案都集中在将自定义类型绑定到现有的JAXB类上,这与之相关,但与我要问的问题无关。如何使以下@WebService接受joda
我一直漫游在互联网的深处,但我发现自己不满足于我所找到的例子到目前为止。有人能给我指点一下,或者给我演示一下,将zipkin跟踪与jaxrs客户机和amqp客户机集成在一起的一个好的起点吗? 我的场景是相当简单的,我希望这个任务是琐碎的TBH。我们有一个基于微服务的体系结构,是时候开始跟踪我们的请求了,我们有了服务间依赖关系的全局视角,以及请求的实际外观(我们有度量标准,但我想要更多!)通信是通过
多年来,我一直试图让托米1.5.2 JAX-RS与杰克逊合作。我想我已经尝试了100种方法。 这是我的最后一次尝试: 我在conf/system.properties中添加了以下内容: 我在托米的 lib 文件夹中添加了: jackson-mapper-asl-1.9.12.jar jackson-core-asl-1.9.12.jar罐 jackson-jaxrs-1.9.12.jar 我在一个
本文向大家介绍SpringMVC + servlet3.0 文件上传的配置和实现代码,包括了SpringMVC + servlet3.0 文件上传的配置和实现代码的使用技巧和注意事项,需要的朋友参考一下 简单几步,实现SpringMVC+servlet3.0文件上传功能: 第一步:配置web.xml文件中的servlet,添加multipart-config: 第二步:在servlet.xml中配