我对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);