通过部署的.jar Jetty服务器。 为什么我不能访问索引?(Deploying Jetty

2019-09-27 04:52发布

我试图从部署一个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

谢谢!

Answer 1:

使用你得到了URL htmlDirectory作为基本资源为整个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.config.server.provider.packages )确保您禁用泽西配置,使新泽西州提供静态内容本身。 让码头负责。 (至于如何做到这一点,那是另外一个问题,这是泽西版本具体有答案已经在计算器)



文章来源: Deploying Jetty server via .jar. Why can't I access the index?
标签: java jar Jetty