如何在 Java SE 环境中部署 JAX-RS 应用程序?



我想用JAX-RS编写一个RESTful Web服务,我想像http://localhost:[port]一样在本地主机上发布它。我在这个答案中读到了以下内容:

Java SE 7 (JSR

336) 和 Java SE 8 (JSR 337) 规范 不要合并 JAX-RS 组件。但是,JAX-RS 应用程序 可以在 Java SE 环境中发布(使用RuntimeDelegate)和 JAX-RS 实现也可以支持通过 JAX-WS 发布。

提到了RuntimeDelegate。如何使用它?如果有关于如何完成任务的好例子,请与我分享。

要在 Java SE 环境中部署 JAX-RS 应用程序,可以使用 JAX-RS 实现支持的RuntimeDelegate和 HTTP 服务器。不需要 servlet 容器。

JSR 339 声明如下:

在 Java SE 环境中,可以使用RuntimeDelegatecreateEndpoint方法获取端点类的已配置实例。应用程序提供Application实例和所需的终结点类型。实现可以支持任何所需类型的零个或多个终结点类型。

如何使用生成的端点类实例发布应用程序超出了本规范的范围。

Jersey 是 JAX-RS参考实现,它支持一系列 HTTP 服务器,您可以使用这些服务器在 Java SE 中部署 JAX-RS 应用程序。

例如,对于灰熊和RuntimeDelegate,您可以拥有以下内容:

public class Example {
public static void main(String[] args) {
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(GreetingsResource.class);
HttpHandler handler = RuntimeDelegate.getInstance()
.createEndpoint(resourceConfig, HttpHandler.class);
HttpServer server = HttpServer.createSimpleServer(null, 8080);
server.getServerConfiguration().addHttpHandler(handler);
try {
server.start();
System.out.println("Press any key to stop the server...");
System.in.read();
} catch (Exception e) {
System.err.println(e);
}
}
@Path("/greetings")
public static class GreetingsResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getGreeting(){
return "Hello from the other side.";
}
}
}

该应用程序将在http://localhost:8080/greetings提供。

上面显示的示例需要以下依赖项:

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-server</artifactId>
<version>2.3.30</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
<version>2.25.1</version>
</dependency>

其他受支持的实现包括:

  • JDK HTTP 服务器
  • 简单服务器
  • Jetty HTTP Server
  • Netty HTTP Server

泽西岛文档还描述了没有RuntimeDelegate的 Java SE 环境的其他部署替代方案。

相关内容

  • 没有找到相关文章

最新更新