代码之家  ›  专栏  ›  技术社区  ›  Eduardo

兄弟项目中的Jetty资源库

  •  1
  • Eduardo  · 技术社区  · 9 年前

    我需要配置我的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
    

    My 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 而不是索引。html文件。如果我击中 localhost:8080/index.html 我得到了 404 。我做错了什么?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community CDub    7 年前

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

    你不想要另一个 WebAppContext ,只需添加另一个特定 DefaultServlet 在您的原件上 WebAppContext .

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