YH.*_*ang 1 java rest tomcat servlets maven
目前,我的 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>
Run Code Online (Sandbox Code Playgroud)
下面是我的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>
Run Code Online (Sandbox Code Playgroud)
Tomcat是一个 Java Web 服务器,它实现了多个(但不是全部)Java EE规范。另一个 Java Web 服务器是Jetty。它们与Glassfish或JBoss / WildFly等完整应用程序服务器的不同之处在于它们实现的Java EE规范的数量。相当小的Tomcat实现了JavaServer Pages和Java Servlet,这对于很多应用程序来说已经足够了。
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 服务库,因此不可能对它们进行比较或说其中一个比另一个具有“更多的功能”。
| 归档时间: |
|
| 查看次数: |
4535 次 |
| 最近记录: |