簡體   English   中英

通過 .jar 部署 Jetty 服務器。 為什么我無法訪問索引?

[英]Deploying Jetty server via .jar. Why can't I access the index?

我正在嘗試從 jar 文件部署 Jetty 服務器。 jar 在服務器上運行時,它至少會到達 Jetty 404 頁面,但無法到達index.html

我用於啟動服務器的主類如下所示,並且在本地主機上通過 IDE 運行時在本地運行良好:

public static void main(String[] args) {
    Server server = new Server(8080);

    ServletContextHandler servletContextHandler = new ServletContextHandler(NO_SESSIONS);
    servletContextHandler.setContextPath("/");

    DefaultServlet defaultServlet = new DefaultServlet();
    ServletHolder holderPwd = new ServletHolder("default", defaultServlet);

    final URL htmlDirectory = JerseyApplication.class.getResource("/html");

    holderPwd.setInitParameter("resourceBase", htmlDirectory.getFile());

    servletContextHandler.addServlet(holderPwd, "/*");
    server.setHandler(servletContextHandler);

    ServletHolder servletHolder = servletContextHandler.addServlet(ServletContainer.class, "/api/*");
    servletHolder.setInitOrder(0);
    servletHolder.setInitParameter(
            "jersey.config.server.provider.packages",
            "com.x.y.z.parser");

    try {
        LOGGER.info("Starting server");
        server.start();
        server.join();
    }
    catch (Exception ex) {
        LOGGER.error("Server failed to start - Aborting");
        ex.printStackTrace();
    }
    finally {
        LOGGER.info("Destroying server");
        server.destroy();
    }
}

所有 html 內容都在src/main/resources/html目錄中。

當我運行jar tvf jarfile.jar | grep html jar tvf jarfile.jar | grep html我可以看到html目錄,它的內容在那里:

0 Thu Nov 01 11:48:46 UTC 2018 html/
2258 Thu Nov 01 11:48:46 UTC 2018 html/formRequest.js
871 Thu Nov 01 11:48:46 UTC 2018 html/index.html

謝謝!

使用從htmlDirectory獲得的 URL 作為整個ServletContextHandler的基本資源。

有關詳細信息,請參閱先前的答案: https : //stackoverflow.com/a/39019797/775715

final URL htmlDirectory = JerseyApplication.class.getResource("/html");

// TODO: Handle error if htmlDirectory == null

ServletContextHandler servletContextHandler = new ServletContextHandler(NO_SESSIONS);
servletContextHandler.setContextPath("/");
servletContextHandler.setBaseResource(Resource.newResource(htmlDirectory));

DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holderPwd = new ServletHolder("default", defaultServlet);
// holderPwd.setInitParameter("resourceBase", htmlDirectory.getFile()); <-- not needed here
servletContextHandler.addServlet(holderPwd, "/"); // NOTE: MUST be "/" not "/*"!

最后一件事,您似乎在使用 Jersey。 (又名jersey.config.server.provider.packages )確保禁用使 Jersey 本身提供靜態內容的 Jersey 配置。 讓碼頭負責。 (至於這是如何完成的,這是另一個問題,這是特定於 Jersey 版本的,並且已經在 stackoverflow 上提供了答案)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM