Хранение веб-контента в файле JAR - PullRequest
11 голосов
/ 14 октября 2008

Можно ли хранить веб-контент (например, JSP, HTML, изображения, CSS и т. Д.) В файле JAR?

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

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

Любые идеи будут оценены! :)

Обновление: вероятно, мне следует уточнить. Как вы получаете веб-контейнер (например, Tomcat) для загрузки ресурсов из файла JAR? Например, я развертываю файл .war с моим веб-приложением. Если я получу доступ к /index.jsp, контейнер попытается найти в каталоге веб-материалов файл index.jsp.

Есть ли простой способ настроить свой собственный загрузчик ресурсов с помощью Tomcat и т. П., Чтобы он выполнял поиск как по пути к классам, так и по файловой системе?

Ответы [ 6 ]

3 голосов
/ 05 ноября 2010

Если вы используете Maven для создания своего веб-приложения, вы можете создать WAR своих ресурсов и наложить эту WAR на WAR-файл вашего веб-приложения во время сборки.

Ресурс WAR, содержащий все ваши JSP, изображения, CSS и т. Д., Называется «наложением» и представляет собой просто зависимость в целевом веб-приложении с типом, установленным на «war».

Когда вы упаковываете ваше веб-приложение, ресурс WAR будет копировать только неконфликтующие файлы. Итак, если у вас есть уникальный index.jsp в вашем проекте, и вы хотите использовать его вместо index.jsp в оверлее, просто включите его в целевое веб-приложение, и Maven не будет копировать этот ресурс.

Больше информации на странице плагина Maven War о оверлеях .

3 голосов
/ 14 октября 2008

Да, можно хранить файлы, например, свойства, xml, xslt, изображения и т.д .; в файл JAR (или WAR) и извлекайте их во время выполнения.

Чтобы загрузить ресурс из файла развертывания, используйте следующий код.

this.getClass().getClassLoader().getResourceAsStream( filename ) ;

В проекте maven папки и файлы, размещенные в ресурсах, включены в jar. Имя файла относительно корня файла jar, поэтому «./filename.xml» будет соответствовать файлу filename.xml, помещенному в «/src/java/resources".

».
1 голос
/ 16 октября 2008

Файл тега похож на фрагмент JSP, который можно поместить в банку. Использование файлов тегов может вам помочь, но я никогда не пытался использовать изображения, CSS и т. Д. В банке.

1 голос
/ 16 октября 2008

Вы также можете использовать проект weblets (см. https://weblets.dev.java.net/).

Вы храните некоторые ресурсы в библиотеке JAR (такие как images, css, javascript ...) и пишете очень простой weblet-config.xml Затем на странице JSF вы можете напрямую ссылаться на них с помощью следующего синтаксиса:

<h:graphicImage src="weblet://some-name/images/someimage.jpg" .../>
1 голос
/ 14 октября 2008

Абсолютно. Черт возьми, вы можете хранить содержимое непосредственно в файле WAR, который в основном представляет собой файл JAR с несколькими дополнительными битами. Да, вам может понадобиться написать собственный распознаватель для использования ClassLoader.getResourceAsStream, но, по сути, поскольку вы получаете возможность генерировать контент, как вам нравится, выборка его из файла JAR кажется вполне разумной. Возможно, вы захотите убедиться, что он выбирает только очень специфический набор расширений:)

0 голосов
/ 04 июля 2016

В Core JavaServer Faces, 3-е издание, в разделе «Упаковка составных компонентов в JAR» на стр. 382, речь идет об упаковке составных компонентов в файлы JAR.

"Все, что вам нужно сделать, это поместить ваш составной компонент и его артефакты, такие как JavaScript, таблицы стилей или файлы свойств, в каталог META-INF в JAR, как показано на рисунке 9-14."

components.jar
+-- META-INF
    +-- resources
        +-- css
        |   +-- styles.css
        +-- images
        |   +-- back.png
        +-- util
            +-- icon.xhtml
            +-- login.js
            +-- login.properties

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

...