繁体   English   中英

码头服务器中的REST和静态内容

[英]REST and static content in jetty server

我想要一个(嵌入式)jetty + jersey服务器,该服务器提供REST api(“ / resource”路由上的GET和POST),但也提供一些静态内容(“ /”上的index.html,bundle.js) 。 我只能让/ resource部分起作用-GET / POST经过curl测试

curl -X POST -H 'Content-Type: application/json' -d '{"resource":"FOOBAR"}' http://localhost:8080/resource

但是,使用此设置,“ /”路径返回404:

public static void main(String[] args) {

        Server jettyServer = new Server(8080);

        ResourceConfig rc = new ResourceConfig();

        JSONResource resource = new JSONResource();

        rc.register(resource);

        ServletContainer sc = new ServletContainer(rc);

        ServletHolder servletHolder = new ServletHolder(sc);
        // ServletHolder servletHolder = new ServletHolder("default", new DefaultServlet());

        // static content
        servletHolder.setInitParameter("resourceBase", "./src/webapp/");

        ServletContextHandler context = new ServletContextHandler();
        context.addServlet(servletHolder, "/*");

        jettyServer.setHandler(context);

        try {

            jettyServer.start();
            jettyServer.join();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jettyServer.destroy();
        }

    }

路径:

@Path("/resource")
public class JSONResource {

    Resource resource =  Resource.getInstance();

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String getStringResource() {
        return this.resource;
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response putStringResource(Resource json) {

        this.resource.setResource(json.getResource());
        return Response.status(Status.OK).entity(json).build();
    }

}

和Resource类的完整性:

public class Resource {

    private String resource = "";

    private Resource() {
    }

    private static class Holder {
        private static final Resource INSTANCE = new Resource();
    }

    public static Resource getInstance() {
        return Holder.INSTANCE;
    }

    public String getResource() {
        return resource;
    }

    public void setResource(String resource) {
        this.resource = resource;
    }

    @Override
    public String toString() {
        return resource;
    }

}

user3732793在以下每个答案中进行了编辑

    // ---JSON RESOURCE---//

    JSONResource resource = new JSONResource();

    ResourceConfig rc = new ResourceConfig();
    rc.register(resource);

    ServletContainer sc = new ServletContainer(rc);

    ServletHolder servletHolder = new ServletHolder(sc);

    ServletContextHandler jsonResourceContext = new ServletContextHandler();
    jsonResourceContext.addServlet(servletHolder, "/*");

    // ---STATIC RESOURCE---//

    ResourceHandler staticResourceHandler = new ResourceHandler();

    staticResourceHandler.setResourceBase("./src/webapp/");

    ContextHandler staticContextHandler = new ContextHandler("/");
    staticContextHandler.setHandler(staticResourceHandler);

    // ---ADD HANDLERS---//

    HandlerList handlers = new HandlerList();

    handlers.setHandlers(new Handler[] { jsonResourceContext, //
            staticContextHandler, //
            new DefaultHandler() //
    });

    jettyServer.setHandler(handlers);

可以做到一点点冗长吗?

您的服务器类只有一个用于静态内容的处理程序。 您将需要一个用于JSON内容的附加处理程序。 然后必须将其分配给处理程序列表。

例如

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { jsonRessourcehandler, servletContextHandler, new DefaultHandler() });
    server.setHandler(handlers);

还提供类似json的内容,您可以正确地搜索JERSEY库/示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM