当前位置: 首页 > 面试题库 >

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

丘智志
2023-03-14
问题内容

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

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

JAR文件中的文件夹。这是一个空洞的JAR文件(不是WAR,没有框架,没有Spring, 就像我们可能的那样
)。初始测试继续引发类似于以下字符串的异常:

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

尽管服务器似乎正在运行,但结果无法找到我的index.html。( 更新 :)本示例仅取自Jetty的“
嵌入式文件服务器 ”示例。在这种情况下,要求将Jetty 资源库
映射到JAR文件(完整URL):

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

如下:

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

代替给出的示例:

  • resource_handler.setResourceBase(“。”);

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

  • 本地主机:8080 / index.html
    • …给…
  • jar:文件:!/ webapp / 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());

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

  • 本地主机:8080

服务helloWorld.html文件。

  • 本地主机:8080 / other

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

在Linux上,如果有人 CP -sA在顶部运行JAR的新的JarFile,码头给出:

 HTTP ERROR: 500

 Problem accessing /. Reason:

        java.lang.NullPointerException

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

  • mv fileserver.jar fileserverXX.jar

Jetty愉快地继续从(重命名)fileserverXX.jar内容提供服务。我可以为此感到高兴。但是我仍然想知道等效的相对路径以匹配绝对文件名。



 类似资料:
  • 首先,使用setspn命令为用户注册服务主体名称。 setspn-CS/dummy@abc.com dummy user setspn-l虚拟用户 给出输出为 CS公司/dummy@abc.com 接下来,当使用 /mapUser 选项执行 ktpass 命令时,将修改用户帐户的服务主体名称,以便删除域组件。 ktpass/pass Password @ 123-out dummy . 1 . k

  • 我使用的是Jetty 9.2。我有一个依赖项JAR,目前我将它放在“lib/ext/”文件夹中,因此它会自动加载。我还尝试在Jetty的“start.bat”中使用“-lib=%EXT_JAR PATH%”。这将在启动时加载JAR。是否可以将JAR保存在自定义文件夹中,并使其在启动类加载器上自动加载,而无需在“start.bat”文件中指定? 提前谢谢。

  • 有没有一种方法可以使用maven jetty插件生成一个带有嵌入式jetty的fat jar?

  • 我一直在寻找如何让嵌入式jetty服务器为包含在同一个JAR中的少数html文件提供服务,但没有成功。这肯定是可能的吗? 如果没有必要,我真的不想经历建设和战争的麻烦。理想情况下,我也不必创建WEB-INFO dir和web.xml文件,尽管我读过的所有解决方案似乎都指向使用WebAppContext来实现这一点。 我阅读了以下链接,但还没有找到在从JAR运行时设置ResourceBase或Bas

  • 我正在使用gradle构建uber jar,我使用的插件https://github.com/johnrengelman/shadow 我在文件夹中有一个json文件,我在下面的代码中使用它 当我运行uber Jar时,面临以下问题 我的build.gradle是这样的

  • 因此,当我编写java文件时: 然后在windows cmd中,我以以下方式编译: 很好,结果是: “严肃的业务逻辑。” 在Netbeans中创建项目时,会添加以下行: 我不能在cmd中编译,只能在IDE中编译。我尝试过manifest.txt,UTF8编码没有BOM,加上文件的换行符。 显示txt: “jar cvfm Program.jar Manifest.txt Program.class