编程语言
首页 > 编程语言> > java – 为嵌入式Jetty指定JAR“resources / webapp”文件夹的ResourceBase的正确URL是什么?

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

作者:互联网

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

> resources / webapp
> set:resource_handler.setResourceBase(“webapp”)

>通过正确的URL指向JAR file中的该资源.

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

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

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

>“jar:file:!/ 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文件?

>资源/

> config /

> display.properties

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

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

给出一般的想法.

类似的问题:

> Starting up embedded jetty server for a JAR file

解决方法:

我有一个可行的解决方案 – 我正在发布的解决方案,希望这种方法能激发正确的方法.我仍然认为应该有一种方法来指定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());

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

> localhost:8080

提供helloWorld.html文件.

> localhost: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内容继续提供服务.我很高兴.但是,我仍然想知道匹配绝对文件名的等效相对路径.

标签:java,maven,url,jar,jetty-9
来源: https://codeday.me/bug/20190928/1828948.html