gpt4 book ai didi

java - 为嵌入式 Jetty 指定 JAR "resources/webapp"文件夹的 ResourceBase 的正确 URL 是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:58:34 25 4
gpt4 key购买 nike

我们想要一个简单的嵌入式 Jetty servelet,其中包含 JAR 文件资源文件夹中的 Web 资源。我们在 JAR 中有一些属性文件,并使用资源路径加载它们。我们希望将 Jetty 资源库指定为:

  • 资源/网络应用
  • 设置:resource_handler.setResourceBase( "webapp")
    • 通过正确的 URL 指向 JAR file 中的那个资源.

JAR 文件中的文件夹。这是一个基本的 JAR 文件(不是 WAR,没有框架,没有 Spring,尽我们所能)。初始测试继续抛出类似以下字符串的异常:

webPath = "jar:file:!/webapp";     //.... runs the Jetty server 
...
resource_handler.setResourceBase( webPath );

虽然服务器好像可以运行,但是结果找不到我的index.html。 (更新:)这个例子只是取自 Jetty“Embedded File Server”的例子。在这种情况下,要求 Jetty Resource Base 映射到 JAR 文件(完整 URL):

  • “ jar :文件:!/webapp/index.html”,

如下:

  • resource_handler.setResourceBase("jar:file:!/webapp");

代替给出的例子:

  • resource_handler.setResourceBase(".");

我们希望将浏览器 URL 映射为:

  • localhost:8080/index.html
    • ...给予...
  • jar:file:!/webapp/index.html

为了对比下面配置文件的 JAR 路径。问题:应该做什么 the URL是 Jetty 资源库可以提供我的 Index.html 文件吗?

  • 资源/
    • 配置/
      • 显示.properties

文件是:“/config/display.properties”,这在使用加载资源操作的同一项目代码中工作。布局是这样的:

 app.jar
+----- com /
| +--- ( classes ... )
|
+----- config /
| |
| +--- display.properties
|
+----- webapp /
|
+--- index.html

给出总体思路。

类似问题:

最佳答案

我有一个有效的解决方案 - 我发布的变通办法是希望这种方法能够激发正确的方法。我仍然相信应该有一种方法可以指定 JAR 中相对于 JAR 的文件夹。

不管怎样,这个方法是有效的。我用它来服务器 JAR 中的静态 Web 内容。本质上,我让 Java 解析运行中的 JAR 资源的绝对路径,并将该路径名传递给 Jetty。当我这样做时,Jetty 会显示我的“helloWorld.html”欢迎文件。

    String  baseStr  = "/webapp";  //... contains: helloWorld.html, login.html, etc. and folder: other/xxx.html
URL baseUrl = SplitFileServerRunner.class.getResource( baseStr );
String basePath = baseUrl.toExternalForm();

....
resource_handler.setDirectoriesListed(true); //... just for testing
resource_handler.setWelcomeFiles(new String[]{ "helloWorld.html" });
resource_handler.setResourceBase( basePath );
LOG.info("serving: " + resource_handler.getBaseResource());

在欢迎文件中,我放置了特定的文本来标识文件的来源(在资源文件夹中)。在浏览器中:

  • 本地主机:8080

提供 helloWorld.html 文件。

  • 本地主机:8080/其他

显示 JAR 文件内的 jar:/webapp/other/ 目录的目录列表。这依赖于在服务器运行时更改 JAR。

在 Linux 上,如果有人cp-s 一个新的 jarfile 在运行的 JAR 之上,Jetty 给出:

 HTTP ERROR: 500

Problem accessing /. Reason:

java.lang.NullPointerException

而且您无法再访问页面。这是出乎意料的(显然 JAR 保持打开状态)。好消息是,如果您 mv-s jarfile:

  • mv fileserver.jar fileserverXX.jar

Jetty 愉快地继续从(重命名的)fileserverXX.jar 内容提供服务。我对此很满意。但是我仍然想知道与绝对文件名匹配的等效相对路径。

关于java - 为嵌入式 Jetty 指定 JAR "resources/webapp"文件夹的 ResourceBase 的正确 URL 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25154708/

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