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

jetty+Jersey在intelliJ中的工作在Jar中失败

  •  1
  • EarlyDev  · 技术社区  · 7 年前

    我对java非常陌生,所以我不知道为什么会发生这种情况。

    我使用Jersey+Jetty开发了一个小型java应用程序。当在intelliJ中运行它时,它可以很好地工作,但在jar中不起作用。 当我转到localhost时:2222 jetty应该给我显示一个索引。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();
            }
    }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   EarlyDev    7 年前

    要想让这一切顺利进行,需要做几件事。 首先,src/web目录未包含在中。罐子

    一旦解决了这个问题,问题就会一直存在,因为代码无法找到索引的位置。中的html页。罐子

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

    String webDir = this.getClass().getClassLoader().getResource("src/Web").toExternalForm(); 
    
    ResourceHandler resourceHandler = new ResourceHandler();
    resourceHandler.setWelcomeFiles(new String[]{"index.html"});
    resourceHandler.setResourceBase(webDir);
    
        2
  •  0
  •   Joakim Erdfelt    7 年前

    指定的上下文路径为 /rest 在嵌入式码头代码中。

    你看到的信息甚至告诉你这一点。

    如果您希望它位于根目录下,那么您的代码应该是 new ContextHandler("/"); 相反