我对Java很陌生,所以我不确定为什么会这样。

我使用Jersey + Jetty开发了一个小型Java应用程序。在intelliJ中运行它时效果很好,但无法从jar中运行。
当我转到localhost:2222时,码头应该给我看一个index.html页面
但是Jetty表示此服务器上没有上下文匹配或处理了此请求。



Jar是根据以下说明创建的:How to build jars from IntelliJ properly?

    public class App{
    private static final int SERVER_PORT = 2222;

    public static void main(String[] args) throws Exception {
        URI baseUri = UriBuilder.fromUri("http://localhost").port(SERVER_PORT)
        .build();
        ResourceConfig config = new ResourceConfig(Resource.class);
        Server server = JettyHttpContainerFactory.createServer(baseUri, config,
        false);

        ContextHandler contextHandler = new ContextHandler("/rest");
        contextHandler.setHandler(server.getHandler());

        ResourceHandler resourceHandler = new ResourceHandler();
        resourceHandler.setWelcomeFiles(new String[] { "index.html" });
        resourceHandler.setResourceBase("src/Web");

        HandlerCollection handlerCollection = new HandlerCollection();
        handlerCollection.setHandlers(new Handler[] { resourceHandler,
        contextHandler, new DefaultHandler() });
        server.setHandler(handlerCollection);
        server.start();
        server.join();
        }
}

最佳答案

要使此工作正常,需要做一些事情。
首先,.jar中未包含src / web目录。

一旦解决,问题仍然存在,因为代码无法在.jar中找到index.html页面的位置。

将我的代码更改为以下代码可以修复它。

String webDir = this.getClass().getClassLoader().getResource("src/Web").toExternalForm();

ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setWelcomeFiles(new String[]{"index.html"});
resourceHandler.setResourceBase(webDir);

10-07 19:00
查看更多