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

And*_*rey 4 java rest web-services jax-rs

我想用JAX-RS编写RESTful Web服务,我想在localhost上发布它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被提及.我怎么用呢?如果有关于如何完成任务的好例子,请与我分享.

cas*_*lin 5

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

JSR 339规定如下:

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

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

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

例如,使用GrizzlyRuntimeDelegate,您可以拥有以下内容:

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.";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该应用程序将在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>
Run Code Online (Sandbox Code Playgroud)

其他支持的实现包括:

Jersey 文档还描述了 Java SE 环境的其他部署替代方案,没有RuntimeDelegate.