目前,似乎我的jax-rs服务正在使用Jersey ServletContainer但在Tomcat上运行。这让我感到困惑,因为根据我的理解,Jersey是一个比Tomcat具有更多功能的服务器,并且不包含Tomcat,但现在,我的项目使用Jersey的库但在Tomcat上运行,这怎么可能发生呢?
下面是我的web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- Jersey Servlet -->
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>main.java</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
下面是我的pom.xml(我使用过Maven):
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>web</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- servlet dependencies -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.19</version>
</dependency>
</dependencies>
答案 0 :(得分:1)
Tomcat 是一个Java Web服务器,它实现了几个但不是全部的 Java EE 规范。另一个Java Web服务器是 Jetty 。它们与 Glassfish 或 JBoss / WildFly 等完整应用程序服务器的区别在于它们实现的 Java EE 规范的数量。相当小的 Tomcat 实现 JavaServer Pages 和 Java Servlets ,这对于很多应用程序来说已经足够了。
Jersey 是一个Java库,用于服务和调用REST(或主要是HTTP,因为并非所有东西都是REST)API。它构建于 Java EE 规范之上,因此可以在任何实现这些规范的服务器上使用,例如:的 Tomcat的强>
在web.xml
文件中,您可以定义多个servlet。 servlet的作用由<servlet-class>
元素定义。您可以在HttpServlet
之上传递自己的实现。在您的情况下,您使用 Jersey servlet,然后管理对其映射到的URL(<servlet-mapping>
)的所有请求。您现在可以学习使用 Jersey ,实现所需的API行为并构建Web存档(.war
)。然后,可以将该Web存档部署到任何实现所需规范的Web服务器,例如,的 Tomcat的即可。如果您开始使用其他 Java EE 技术(如 Enterprise JavaBeans ),则需要检查哪个服务器实现实现了此技术。您可以使用 Glassfish , Jersey 没有区别。
编辑:我忘了说 Jersey 是 JAX-RS 规范的一个可能(参考)实现,比如 Tomcat 是一个可能的 Java Servlet (和其他)实现。然而,一个是Web服务器,另一个是Web服务库,所以不可能比较它们或者说它们具有比#34;更多的功能。另一个。
答案 1 :(得分:0)
Tomcat是一个Servlet容器。如果Jersey有一个Servlet,Jersey可以在Tomcat中运行。