gpt4 book ai didi

jetty - 在 Java 应用程序中嵌入 jetty 并导出为 jar

转载 作者:行者123 更新时间:2023-12-01 05:36:06 24 4
gpt4 key购买 nike

我正在制作一个嵌入 Jetty Web 服务器的 Java 应用程序,该服务器反过来提供使用 Google Web Toolkit 开发的内容。在 Eclipse 中运行时一切正常,但是当我将其导出为 jar 文件时,我得到的只是一条 Jetty 错误消息,显示“找不到文件”。

Jetty 服务器是这样启动的:

    WebAppContext handler = new WebAppContext();
handler.setResourceBase("./war");
handler.setDescriptor("./war/WEB-INF/web.xml");
handler.setContextPath("/");
handler.setParentLoaderPriority(true);
server.setHandler(handler);

try {
server.start();
server.join();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

我怀疑问题出在 handler.setResourceBase() 和 handler.setDescriptor() 中使用的相对路径。我已经用谷歌搜索并测试了很多解决方案,但到目前为止都无济于事。特别是我尝试过使用 getClass().getResource("./war").toExternalForm() 之类的东西,但这只会引发 Null 异常。

我也试过:
ProtectionDomain protectionDomain = Start.class.getProtectionDomain();
URL location = protectionDomain.getCodeSource().getLocation();

但这只会导致 Jetty 提供 Java 类的目录列表。

有没有办法做到这一点?

最佳答案

  • 将已编译的 GWT 应用程序的所有文件复制到您的 Java 包之一中。例如:
    my.webapp.resources
    html/MyPage.html
    gwtmodule/gwtmodule.nocache.js
    ...

    ( htmlgwtmodule 也将成为 Java 包)。
  • 配置嵌入式 Jetty 实例以提供这些文件。
     final String webDir = this.getClass().
    getClassLoader().getResource("my/webapp/resources").toExternalForm();

    final Context root = new Context(server, "/", Context.SESSIONS);
    root.setContextPath("/");
    root.setResourceBase(webDir);
    root.addServlet(MyGwtService.class, "/servlets/v01/gwtservice");

  • 当应用程序从 Eclipse 运行以及部署时,这种方法对我都适用。

    关于jetty - 在 Java 应用程序中嵌入 jetty 并导出为 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652021/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com