JAX-RS Web 服务在 GlassFish Server 4.0 上运行但不在 Tomcat 上运行
JAX-RS web service is working on GlassFish Server 4.0 but not working on Tomcat
我是 Web 服务的新手。所以我从一个像下面这样的小程序开始。
它在 GlassFish 服务器中运行良好,但在 Tomcat 中运行不正常(我想在 Tomcat 上 运行)。这是一个简单的程序,仅给出了如何 运行 Web 服务应用程序的想法。
FirstRestService.java:
package com.sandy.demo;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/resources")
public class FirstRestService extends Application {
}
Employees.java:
package com.sandy.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/employees")
public class Employees {
@GET
public String getEmployeesNames() {
return "Hello World";
}
}
我已经包含了 jsr311-api-1.1.1.jar
(JAX-RS API JAR 文件)。
我获取了应用程序的工作 WAR 文件并部署在 GlassFish Server 中。然后我运行服务器用URL:http://localhost:8080/MyFirstRestApplication/resources/employees
。
但我无法在 Tomcat 中做同样的事情。
请注意jsr311-api-1.1.1.jar
指的是JAX-RS 1.1. GlassFish Server 4.0 uses JAX-RS 2.0。
除了正确的 JAX-RS 依赖 JAR 之外,您还需要一个 JAX-RS 实现,例如 Jersey (used by GlassFish) or RESTEasy (used by WildFly)。
GlassFish 已包含您需要的所有 JAX-RS 2.0 和 Jersey 依赖项。 Tomcat 没有。
既然您使用的是 GlassFish,您可能会选择 Jersey。有两种方法可以在您的 Tomcat 项目中包含 JAX-RS 和 Jersey:
1。使用 Maven
如果您使用的是 Maven,请将以下依赖项添加到您的 pom.xml
:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<!-- if your container implements Servlet API older than 3.0,
use "jersey-container-servlet-core" -->
<artifactId>jersey-container-servlet</artifactId>
<version>2.22.1</version>
</dependency>
<!-- Required only when you are using JAX-RS Client -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.22.1</version>
</dependency>
只要确保您根据 Tomcat Servlet API 版本使用正确的 artifactId
:如果您的 Tomcat 实现的 Servlet API 早于 3.0 , 使用 jersey-container-servlet-core
. Otherwise, use jersey-container-servlet
。
在 Tomcat documentation 上,您将找到有关每个 Tomcat 版本使用的 Servlet API 版本的信息。总结:
- Tomcat 8.0.x: Servlet API 3.1
- Tomcat 7.0.x: Servlet API 3.0
- Tomcat 6.0.x: Servlet API 2.5
每个artifactId
的最新版本可以在Maven Repository中查看:
在 documentation page 上查看有关 Jersey 依赖项的更多信息。
2。手动下载 JAX-RS 和 Jersey 依赖项
如果您不使用 Maven,请参阅 Jersey download page,下载 Jersey JAX-RS 2.0 RI 包 并在类路径中包含依赖项。
Jersey JAX-RS 2.0 RI 包 包含 JAX-RS 2.0 API JAR、所有核心 Jersey 模块 JAR 以及所有必需的 3rd-党的依赖。
我是 Web 服务的新手。所以我从一个像下面这样的小程序开始。
它在 GlassFish 服务器中运行良好,但在 Tomcat 中运行不正常(我想在 Tomcat 上 运行)。这是一个简单的程序,仅给出了如何 运行 Web 服务应用程序的想法。
FirstRestService.java:
package com.sandy.demo;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/resources")
public class FirstRestService extends Application {
}
Employees.java:
package com.sandy.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/employees")
public class Employees {
@GET
public String getEmployeesNames() {
return "Hello World";
}
}
我已经包含了 jsr311-api-1.1.1.jar
(JAX-RS API JAR 文件)。
我获取了应用程序的工作 WAR 文件并部署在 GlassFish Server 中。然后我运行服务器用URL:http://localhost:8080/MyFirstRestApplication/resources/employees
。
但我无法在 Tomcat 中做同样的事情。
请注意jsr311-api-1.1.1.jar
指的是JAX-RS 1.1. GlassFish Server 4.0 uses JAX-RS 2.0。
除了正确的 JAX-RS 依赖 JAR 之外,您还需要一个 JAX-RS 实现,例如 Jersey (used by GlassFish) or RESTEasy (used by WildFly)。
GlassFish 已包含您需要的所有 JAX-RS 2.0 和 Jersey 依赖项。 Tomcat 没有。
既然您使用的是 GlassFish,您可能会选择 Jersey。有两种方法可以在您的 Tomcat 项目中包含 JAX-RS 和 Jersey:
1。使用 Maven
如果您使用的是 Maven,请将以下依赖项添加到您的 pom.xml
:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<!-- if your container implements Servlet API older than 3.0,
use "jersey-container-servlet-core" -->
<artifactId>jersey-container-servlet</artifactId>
<version>2.22.1</version>
</dependency>
<!-- Required only when you are using JAX-RS Client -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.22.1</version>
</dependency>
只要确保您根据 Tomcat Servlet API 版本使用正确的 artifactId
:如果您的 Tomcat 实现的 Servlet API 早于 3.0 , 使用 jersey-container-servlet-core
. Otherwise, use jersey-container-servlet
。
在 Tomcat documentation 上,您将找到有关每个 Tomcat 版本使用的 Servlet API 版本的信息。总结:
- Tomcat 8.0.x: Servlet API 3.1
- Tomcat 7.0.x: Servlet API 3.0
- Tomcat 6.0.x: Servlet API 2.5
每个artifactId
的最新版本可以在Maven Repository中查看:
在 documentation page 上查看有关 Jersey 依赖项的更多信息。
2。手动下载 JAX-RS 和 Jersey 依赖项
如果您不使用 Maven,请参阅 Jersey download page,下载 Jersey JAX-RS 2.0 RI 包 并在类路径中包含依赖项。
Jersey JAX-RS 2.0 RI 包 包含 JAX-RS 2.0 API JAR、所有核心 Jersey 模块 JAR 以及所有必需的 3rd-党的依赖。