我是网络服务新手。所以我开始使用如下的小程序。
它在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中做同样的事情。
答案 0 :(得分:4)
请注意,jsr311-api-1.1.1.jar
是指JAX-RS 1.1。 GlassFish Server 4.0使用JAX-RS 2.0。
除了正确的JAX-RS依赖JAR之外,您还需要JAX-RS实现,例如Jersey(由GlassFish使用)或RESTEasy(由{{3}使用) })。
GlassFish已包含您需要的所有JAX-RS 2.0和Jersey依赖项。 Tomcat没有。
由于您使用的是GlassFish,可能您会选择Jersey。有两种方法可以在Tomcat项目中包含JAX-RS和Jersey:
如果您使用的是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实现了早于3.0的Servlet API,请使用WildFly。否则,请使用jersey-container-servlet-core
。
在jersey-container-servlet
上,您将找到有关每个Tomcat版本使用的Servlet API版本的信息。总结一下:
可以在Maven资源库中检查每个artifactId
的最新版本:
在jersey-container-servlet
上查看有关Jersey依赖项的更多信息。
如果您不使用Maven,请参阅documentation page,下载 Jersey JAX-RS 2.0 RI软件包并在类路径中包含依赖项。
Jersey JAX-RS 2.0 RI软件包包含JAX-RS 2.0 API JAR,所有核心Jersey模块JAR以及所有必需的第三方依赖项。