wil*_*ill 10 java url jar maven jetty-9
我们想要一个简单的嵌入式Jetty服务器,其中包含JAR文件资源文件夹中的Web资源.我们在JAR中有一些属性文件,并使用资源路径加载它们.我们想要将Jetty资源库指定为:
JAR文件中的文件夹.这是一个简单的JAR文件(不是WAR,没有框架,没有Spring,我们可能像vanilla 一样).初始测试继续抛出类似以下字符串的异常:
webPath = "jar:file:!/webapp"; //.... runs the Jetty server
...
resource_handler.setResourceBase( webPath );
Run Code Online (Sandbox Code Playgroud)
虽然服务器似乎运行,但结果无法找到我的index.html.(更新 :)这个例子只是从Jetty" 嵌入式文件服务器 "的例子.在这种情况下,要求Jetty 资源库映射到JAR文件(完整URL):
如下:
而不是给出的例子:
我们希望这将浏览器URL映射为:
相比之下,JAR路径适用于下面的配置文件.问题:URL应该是什么,所以Jetty资源库可以提供我的Index.html文件?
文件是:"/ config/display.properties",这使用加载资源操作在相同的项目代码中工作.布局是这样的:
app.jar
+----- com /
| +--- ( classes ... )
|
+----- config /
| |
| +--- display.properties
|
+----- webapp /
|
+--- index.html
Run Code Online (Sandbox Code Playgroud)
给出一般的想法.
类似的问题:
我有一个可行的解决方案 - 我正在发布的解决方案,希望这种方法能激发正确的方法.我仍然认为应该有一种方法来指定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());
Run Code Online (Sandbox Code Playgroud)
在欢迎文件中,我已经放置了特定的文本来标识文件的来源(在资源文件夹中).在浏览器中:
提供helloWorld.html文件.
显示JAR文件中jar:/ webapp/other /目录的目录列表.这依赖于在服务器运行时不更改JAR.
在Linux上,如果有人CP -sa在顶部运行JAR的新的JarFile,码头给出:
HTTP ERROR: 500
Problem accessing /. Reason:
java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
而且你不能再访问页面了.这是出乎意料的(显然JAR保持开放).好消息是,如果你mv -s jarfile:
Jetty愉快地从(重命名的)fileserverXX.jar内容继续提供服务.我很高兴.但是,我仍然想知道匹配绝对文件名的等效相对路径.
| 归档时间: |
|
| 查看次数: |
7564 次 |
| 最近记录: |