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

标签 java maven url jar jetty-9

我们想要一个简单的嵌入式 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/

相关文章:

java - 使用 Maven 包添加第 3 方 jar

java - 设置 Maven 的问题

php - 当在地址栏中输入路径时,浏览器会打开图像,但不会将其显示为背景图像。为什么?

java - 在 Java 中组合正则表达式

java - 如何在不解压缩的情况下通过 SFTP (Jsch) 编写压缩字节数组?

java - TOMCAT 状态 404 试了所有错误

url - 如何将我的域名与我的 AWS 应用程序相关联?

java - Spring @RequestMapping 对特殊字符的处理

java - 如何指定测试中方法的执行顺序?

javascript - 为什么href属性使用url编码而不是html编码?