Каков правильный 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.содержимое банки. Я может быть доволен. Однако я все равно хотел бы знать эквивалентный относительный путь, соответствующий абсолютному имени файла.