我正在尝试采用我在网上找到的一个简单的 REST 示例并将其部署到 GlassFish 4.0。我正在使用 Eclipse(OEPE 发行版)和 GlassFish 4.0。当我尝试“运行方式 --> 在服务器上运行”时,REST 示例似乎已部署,但当它尝试访问我的上下文根 (http 时,我立即在 Eclipse 中收到 HTTP 状态 404 - 未找到错误//localhost:8080/RESTFullWS/
)。
根据我所阅读的内容,一切似乎都已就位,但我仍然无法从浏览器访问上下文根或我的服务端点。我想我在这里遗漏了一些明显的东西,但不确定发生了什么。
服务:
package com.example.rest;
@Path("UserInfoService")
public class UserInfo
{
@GET
@Path("/name/{i}")
@Produces(MediaType.TEXT_XML)
public String userName(@PathParam("i") String i)
{
String name = i;
return "<User>" + "<Name>" + name + "</Name>" + "</User>";
}
@GET
@Path("/age/{j}")
@Produces(MediaType.TEXT_XML)
public String userAge(@PathParam("j") int j)
{
int age = j;
return "<User>" + "<Age>" + age + "</Age>" + "</User>";
}
}
在 glassfish-web.xml 中定义的 Web 上下文:
<glassfish-web-app>
<context-root>/RESTFullWS</context-root>
</glassfish-web-app>
http://localhost:8080/RESTFullWS/UserInfoService/name/bob -- gets me the 404.
我的服务部署是否正确?我该如何测试?
最佳答案
主要问题是您选择了一个针对 Tomcat 的教程,它只是一个 servlet 容器,而不是像 GlassFish 那样的完整 Java EE 应用服务器.
GlassFish 4 集成了 Jersey 2.x(这是提供 REST 内容的 JAX-RS 实现)。本教程建议使用 Jersey 1.x 并打包使用 Tomcat 时需要的 Jersey 库,因为 Tomcat 不附带所需的库(对于 JPA、JSF 等其他 Java EE 技术也是如此)。
但解决方案应该很简单。
正如您在评论中发布的那样,您没有 web.xml
,这没关系,您的情况不需要它。
您需要一个类来代表您的 REST 应用程序并加载端点类。它应该类似于:
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(UserInfo.class);
return classes;
}
}
如您所见,UserInfo
类已添加到类列表中。如果您创建了其他端点类,请在此处添加此类。
注释 javax.ws.rs.core.Application
设置 REST 端点的根,并添加在主 context-root
之后。 URL 应如下所示:
http://localhost:8080/RESTFullWS/rest/UserInfoService/name/bob
这应该足够了。从 WEB-INF/lib
文件夹中删除所有 库,因为 GlassFish 包含示例所需的所有内容。如果您需要一个用于导入的库,那么依赖 javaee-api
包就足够了,您不需要将其与应用程序打包在一起。如果您使用 Maven,您的 pom.xml
中应该有这样的条目:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
另请参阅:
关于java - 在 GlassFish 4.0 上部署简单的 REST 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614238/