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

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

  • 资源/ webapp
  • set:resource_handler。 setResourceBase (“webapp”)
    • 通过正确的URL指向JAR文件中的该资源。

JAR文件中的文件夹。 这是一个简单的JAR文件(不是WAR,没有框架,没有Spring, 就像我们的 vanilla 一样 )。 初始测试继续抛出类似以下字符串的exception:

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

虽然服务器似乎运行,但结果无法找到我的index.html。 ( 更新 :)这个例子只是从Jetty“ 嵌入式文件服务器 ”的例子。 在这种情况下,要求Jetty 资源库映射到JAR文件(完整URL):

  • “jar子:文件:/ web应用/ index.html的”,

如下:

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

而不是给出的例子:

  • resource_handler.setResourceBase( “”);

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

  • 本地主机:8080 / index.html的
    • ……给…
  • jar子:文件:/ web应用/ index.html的

相比之下,JAR路径适用于下面的配置文件。 问题: URL应该是什么,所以Jetty资源库可以提供我的Index.html文件?

  • 资源/
    • 配置/
      • display.properties

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

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

给出一般的想法。

类似问题:

  • 为JAR文件启动嵌入式jetty服务器

我有一个可行的解决方案 – 我正在发布的解决方案,希望这种方法能激发正确的方法。 我仍然相信应该有一种方法来指定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上,如果有人在运行JAR的顶部有一个新的jar文件,Jetty给出:

  HTTP ERROR: 500 Problem accessing /. Reason: java.lang.NullPointerException 

而且你不能再访问页面了。 这是出乎意料的(显然JAR保持开放)。 好消息是如果你mv -s jarfile:

  • mv fileserver.jar fileserverXX.jar

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