2008-10-14 5 views
9

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

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

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

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

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

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

ответ

1

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

3

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

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

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

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

1

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

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

<h:graphicImage src="weblet://some-name/images/someimage.jpg" .../> 
+0

Спасибо, это действительно полезно. Теперь, если только был способ заставить JSF pagse самостоятельно в файл .jar ... – 2008-10-16 10:50:46

1

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

3

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

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

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

Дополнительная информация о Maven War plugin page about overlays.

0

В 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 

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