Каков правильный URL-адрес для указания базы ресурсов папки JAR "resources/webapp" для встроенной пристани?

нам нужен простой встроенный Jetty servelet с веб-ресурсами внутри папки ресурсов JAR-файла. У нас есть некоторые файлы свойств в банке и загружать их с помощью пути ресурсов. Мы хотим указать базу ресурсов причала:

  • ресурсы/webapp
  • set: resource_handler.setResourceBase ("webapp" )
    • через правильный URL, чтобы указать на этот ресурс JAR файл.

папка в файле JAR. Это файл с голыми костями (не война, не рамки, без весны, как ваниль как мы можем). Начальные тесты продолжают выдавать исключения для чего-то вроде следующих строк:

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

хотя сервер, кажется, запущен, результат не может найти мой индекс.формат html. (обновление:) этот пример просто берет с пристани"Встроенный Файл Сервер" пример. В этом случае требование предъявляется к причалу Источник для сопоставления с файлом 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, который работает для файлов конфигурации ниже. Вопрос: что должно URL-адресом так ресурсной базы причал может служить мой индекс.формат html файл?

  • ресурсы/
    • конфиг/
      • дисплей.свойства

файл: "/ config / display.свойства", и это работает в том же коде проекта, используя операцию загрузки ресурсов. Макет выглядит так:

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

чтобы дать общую идею.

как вопросы:

1 ответов


у меня есть рабочее решение - работа, которую я публикую в надежде, что этот подход вдохновит правильный метод. Я все еще считаю, что должен быть способ указать папку внутри банки относительно банки.

в любом случае этот метод работает. Я использовал его для сервера статического веб-контента из JAR. По сути, у меня есть Java, разрешающий абсолютный путь к запущенному ресурсу JAR и передающий это имя пути к Jetty. Когда я это делаю, Пристань показывает мой "адский мир".формат 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: / webapp / другое/ каталог внутри файла JAR. Это зависит от не изменение банки пока сервер запущен.

на Linux, если кто-то cp - s новый jarfile поверх бегущей банки, причал дает:

 HTTP ERROR: 500

 Problem accessing /. Reason:

        java.lang.NullPointerException

и вы больше не можете получить доступ к страницам. Это было неожиданно (очевидно, банка открыта). Хорошая новость в том, что если вы mv - s jarfile:

  • МВ файлового сервера.jar fileserverXX.Джар

Jetty счастливо продолжает служить из (переименованного) fileserverXX.содержимое банки. Я может быть доволен. Однако я все равно хотел бы знать эквивалентный относительный путь, соответствующий абсолютному имени файла.