【问题标题】:Embedded Jetty looking for files inside its Jar fileEmbedded Jetty 在其 Jar 文件中查找文件
【发布时间】:2010-11-30 13:57:48
【问题描述】:

我成功地将 Jetty 嵌入到一个测试应用程序中。它可以毫无问题地提供文件。 现在我想知道 Jetty 是否可以提供其自己的 Jar 文件中的文件。

有人知道这是否可能吗?

【问题讨论】:

    标签: jsp jar jetty embedded-jetty embeddedwebserver


    【解决方案1】:

    Jetty 嵌入页面上列出了一个示例,地址为http://docs.codehaus.org/display/JETTY/Embedding+Jetty

    诀窍是创建一个指向您的类路径位置的文件 URL。

    String webDir = this.class.getClassLoader().getResource("com/company/project/mywebdir").toExternalForm();
    
    ServletContextHandler context = new ServletContextHandler();
    context.setContextPath("/");
    context.setResourceBase(webDir);
    

    【讨论】:

    • @phtrivier 实例化 org.mortbay.jetty.Server 或 org.eclipse.jetty.server.Server 的类。
    • 从 JAR 文件运行时,如果 request.getRequestDispatcher(...).forward(req, resp)WEB-INF 下找不到 .jsp 文件,知道该怎么做吗?
    • 上面的链接已经过时了,似乎 Jetty 版本 9.4.11.v20180605 ServletContextHandler 类不存在。
    【解决方案2】:

    如果您将 Spring 加入等式,这非常简单。就这样:

    ... WebAppContext webAppContext = new WebAppContext(); webAppContext.setServer(服务器); webAppContext.setContextPath("/"); webAppContext.setResourceBase(new ClassPathResource("webapp").getURI().toString()); server.addHandler(webAppContext); ……

    这将使jetty在jar文件中找到必要的网络资源。

    【讨论】:

    • 谢谢。我是用 Maven + Assembly 插件做到的 :)
    • “服务器”是什么类型?
    • @WimDeblauwe org.eclipse.jetty.server.Server
    【解决方案3】:

    也许更多的是 hack,但 JAR 文件实际上不是 ZIP 吗? (不确定)您可以将它们解压缩到一个临时文件夹中并从那里提供它们吗?

    【讨论】:

    • 我可以,但为了简单起见,我想要一个 Jar 中的自包含 Web 应用程序。 :)
    • 实际上,如果您尝试设置 webapp 文件夹,jetty 会在内部执行此操作,因此离他不远。
    【解决方案4】:

    找到了答案,不是 Jetty,而是 Winstone。 http://winstone.sf.net

    【讨论】:

    • 投反对票,因为即使你是 OP,这个解决方案确实不是一个解决方案。遇到您遇到的问题的人会采用这种解决方案,这种情况极为罕见。
    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2020-02-29
    相关资源
    最近更新 更多