兄弟项目中的Jetty资源库

时间:2015-08-02 15:44:32

标签: java embedded-jetty multi-project

我需要配置我的Jetty服务器,以便它可以从一个项目提供静态HTML文件,从第二个项目提供REST响应,但我似乎只能让REST端工作......

我的项目结构类似于:

+-project-core
|    +-src/main/java/jetty/JettyRunner.java
|
+-project-web
|    +-src/main/webapp/static/index.html
|
+-project-REST
     +-src/main/java/resource/RestResource.java

我的JettyRunner设置了如下服务器:

    // REST (JERSEY 2.0 stuff)
    WebAppContext restHandler = new WebAppContext();
    restHandler.setResourceBase("./");
    restHandler.setParentLoaderPriority(true);
    restHandler.setClassLoader(Thread.currentThread().getContextClassLoader());

    ServletHolder restServlet = restHandler.addServlet(ServletContainer.class,  "/rest/*");
    restServlet.setInitOrder(0);
    restServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "resource");
    restServlet.setInitParameter("useFileMappedBuffer", "false");

    // Web - note I can't use a ResourceHandler because it doesn't allow the init param I require below
    WebAppContext webHandler = new WebAppContext();
    webHandler.setResourceBase("../project-web/src/main/webapp/static");
    webHandler.setInitParameter("useFileMappedBuffer", "false");
    webHandler.setWelcomeFiles(new String[]{"index.html"});

    // Server
    HandlerCollection handlers = new HandlerCollection();
    handlers.addHandler(webHandler);
    handlers.addHandler(restHandler);

    Server server = new Server(8080);
    server.setHandler(handlers);
    server.start();

REST方面似乎工作正常,我可以点击localhost:8080/rest/someendpoint返回200但是当我点击localhost:8080时,我得到的目录结构为project-core和不是我期待的index.html文件。如果我点击localhost:8080/index.html,我会收到404。我做错了什么?

1 个答案:

答案 0 :(得分:1)

已在Serving Static Files from Alternate Path in Embedded Jetty中回答。

您不想要另一个WebAppContext,只需在原始DefaultServlet上添加另一个特定WebAppContext

  

注意:WebAppContext.addServlet()确实存在。 WebAppContext extends ServletContextHandler如另一个答案所示。