Jersey Servlet在Tomcat上运行?

时间:2017-07-14 22:56:28

标签: java rest maven tomcat servlets

目前,似乎我的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>

2 个答案:

答案 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中运行。