2016-09-06 6 views
3

Можете ли вы использовать <virtual-directory-mapping> для ссылки на статический контент внутри развернутого EAR и принесет ли он какую-либо выгоду?Weblogic <virtual-directory-mapping> внутри развернутого EAR

Отказ от ответственности: Идеально статические ресурсы, такие как шрифты, javascript и css, должны обслуживаться веб-сервером, а не контейнером приложения.

Существует ряд статей по SO относительно <virtual-directory-mapping> в Weblogic. Он также хорошо документирован here и here.

Мое приложение развертывается в следующем месте:

c:\weblogic\deploy\ACME.ear 

Внутри ACME.ear существует следующая структура папок для CSS, Fonts и JS

store.war\include\js\script.js 
store.war\include\js\function.js 
store.war\include\fonts\font.woff 
store.war\include\fonts\font.woff2 
store.war\include\css\css-output\ie.css 
store.war\include\css\css-output\interactive\large.css 
store.war\include\css\css-output\interactive\small.css 

Мой Корневой контекст задается как /store.

В нормальном режиме работы я мог бы получить доступ к своим script.js на сайте следующим образом:

http://www.acme.com/store/include/js/script.js 

Этот запрос будет проходить через мой запрос заявка трубопровода. То, что я пытаюсь достичь, состоит в том, чтобы просто обслуживать содержимое папки /include/ внутри .war в качестве статических документов без необходимости проходить через весь конвейер запросов (в моем случае ATG).

Я добавил следующие строки в мой weblogic.xml

<virtual-directory-mapping> 
    <local-path>C:/weblogic/deploy/ACME.ear/store.war/include</local-path> 
    <url-pattern>/include/css/*</url-pattern> 
    <url-pattern>/include/fonts/*</url-pattern> 
    <url-pattern>/include/js/*</url-pattern> 
    <url-pattern>/include/lib/*</url-pattern> 
</virtual-directory-mapping>  

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

В соответствии с документацией сначала попробуйте сделать его с помощью <virtual-directory-mapping>, прежде чем пытаться отобразить его из корня документа контейнера.

Даже при указанной выше конфигурации статический контент в папке /include/ по-прежнему отображается контейнером, а не как статический ресурс через Weblogic. У меня есть следующие вопросы:

  1. Действительно ли это действительный подход? Несмотря на то, что статические активы существуют в .war, могу ли я отобразить его как «внешние» статические активы, используя приведенную выше конфигурацию?
  2. Должно ли <url-pattern> включить context-root? Должны ли <local-path> включать context-root? (Я пробовал различные комбинации включения и исключения, но безрезультатно)
  3. Как получить доступ к файлам в папках и подпапках с помощью <url-pattern>. Нужно ли указывать каждую подпапку?
+0

Почему вы хотите сделать это выше и не обслуживать их с веб-сервера, как вы указываете? – bated

+0

Вообще-то, потому что CSS, JS, Fonts и некоторые значки (например, favicon) находятся под контролем источника, а те активы, которые обслуживаются Apache, - нет. Я в процессе создания отдельного .war для активов, отличных от JSP (например, CRS в последнее время). Здесь я пытаюсь настроить web.xml, чтобы просто передать запрос в Weblogic и обратно, но по какой-то нечетной причине все еще обрабатывается в ATG. Вероятно, некорректная настройка web.xml с моей стороны. Если бы я работал в инфраструктуре Unix, я бы легко сделал некоторые символические ссылки на всех серверах, и все были бы счастливы. Приоритеты немного изменились, и в ближайшее время мы снова посмотрим на это. – radimpe

+0

Что такое '' filter-mapping> '? Вероятно, вам нужно изменить его для пути к вашим изображениям. – bated

ответ

0

Неверная конфигурация <virtual-mapping-directory>. Поскольку это неверно, Weblogic попытается найти содержимое в этой папке, и, если этого не сделать, вернитесь назад, чтобы обслуживать его по умолчанию doc-root.Правильная конфигурация:

<virtual-directory-mapping> 
    <local-path>C:/weblogic/deploy/ACME.ear/store.war</local-path> 
    <url-pattern>/include/*</url-pattern> 
    <url-pattern>*.js</url-pattern> 
    <url-pattern>*.css</url-pattern> 
    <url-pattern>*.woff</url-pattern> 
</virtual-directory-mapping> 

Что важно отметить, что MUST существует папка под названием:

C:/weblogic/deploy/ACME.ear/store.war/include 

для того, чтобы найти в качестве виртуального каталога.

Все еще не разработано, если оно обеспечивает фактическое преимущество во время выполнения.