Jetty 9上的无描述泽西岛

时间:2014-03-03 02:58:46

标签: java jersey jetty

我正在考虑使用嵌入式Jetty和Jersey在Java中编写独立的REST应用程序。

Jersey文档表明,在Servlet 3.0容器中,Jersey应该能够自动注册Web应用程序,而无需Web描述符文件或代码:https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.3

然而,我怀疑我没有以正确的方式(或根本)正确地调用泽西岛:

        ServletHandler handler = new ServletHandler();

        Server server = new Server(8080);
        server.setHandler(handler);

        server.start();
        server.join();

我尝试过其他一些事情,但大多数其他例子似乎都试图解决其他问题。

我想要实现的完整示例代码在这里: https://github.com/dowlingw/jax-rs-plzhalp

(不相关:我考虑使用DropWizard,但不想要提供的所有东西)

干杯:)

2 个答案:

答案 0 :(得分:5)

这是一个简单的例子

服务器:

package com.mayapp.app;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ServerProperties;
import org.glassfish.jersey.servlet.ServletContainer;

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) {
            Server server = new Server(8112);
            ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
            context.setContextPath("/");
            server.setHandler(context);
            ServletHolder h = new ServletHolder(new ServletContainer());
            h.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "com.myapp.resources");
            h.setInitOrder(1);
            context.addServlet(h, "/*");
            server.setDumpAfterStart(true);
            try {
                server.start();
            }catch(Exception ex) {
               ex.printStackTrace();
            }
        }

}

和资源:

package com.myapp.resources;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("hello")
public class HelloWorldResource {
    @GET
    @Produces("text/plain")
    public String getHello() {
        return "hello world";
    }

}

答案 1 :(得分:0)

你需要将与球衣相关的东西传递给ServletHandler,通常是org.glassfish.jersey.servlet.ServletContainer:

    org.glassfish.jersey.server.ResourceConfig resourceConfig = ...
    org.glassfish.jersey.servlet.ServletContainer servletContainer = new ServletContainer( resourceConfig );
    org.eclipse.jetty.servlet.ServletHolder servletHolder = new ServletHolder( servletContainer );

    org.eclipse.jetty.servlet.ServletHandler handler = new ServletHandler();
    handler.addServlet( servletHolder );

    org.eclipse.jetty.server.Server server = new Server( 8080 );
    server.setHandler( handler );

ResourceConfig提供了许多构造函数和静态工厂,允许您从JAX-RS应用程序创建ResourceConfig实例,或者通过指定一组包来扫描JAX-RS组件。