jetty + Jersey 在 intelliJ 中的工作在 Jar 中失败
jetty + Jersey works in intelliJ fails in Jar
我是 java 的新手,所以我不确定为什么会这样。
我使用 Jersey + Jetty 开发了一个小型 java 应用程序。当 运行 它在 intelliJ 中但在 jar 中不起作用时,这非常有效。
当我去 localhost:2222 码头时,应该会显示一个 index.html 页面
但是码头却说此服务器上没有上下文匹配或处理此请求。
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();
}
}
您在该嵌入式码头代码中指定的上下文路径是 /rest
。
您看到的消息甚至告诉您。
如果你想让它在 root 上,那么你的代码应该是 new ContextHandler("/");
而不是
需要做一些事情才能使它正常工作。
首先 src/web 目录未包含在 .jar 中。
问题解决后问题仍然存在,因为代码无法在 .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);
我是 java 的新手,所以我不确定为什么会这样。
我使用 Jersey + Jetty 开发了一个小型 java 应用程序。当 运行 它在 intelliJ 中但在 jar 中不起作用时,这非常有效。 当我去 localhost:2222 码头时,应该会显示一个 index.html 页面 但是码头却说此服务器上没有上下文匹配或处理此请求。
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();
}
}
您在该嵌入式码头代码中指定的上下文路径是 /rest
。
您看到的消息甚至告诉您。
如果你想让它在 root 上,那么你的代码应该是 new ContextHandler("/");
而不是
需要做一些事情才能使它正常工作。 首先 src/web 目录未包含在 .jar 中。
问题解决后问题仍然存在,因为代码无法在 .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);