Развертывание War-файла с общими ресурсами - PullRequest
0 голосов
/ 31 декабря 2008

Рассмотрим следующую примерную структуру

- Project
    - www
        - files
            + documents
            + html
            + images
            + scripts
    - WEB-INF
        * web.xml

Папка с документами должна быть символической ссылкой или каким-либо другим способом, внешним по отношению к файлу war, поскольку пользователи будут добавлять и удалять документы (через подключенный сетевой диск).

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

Ответы [ 9 ]

1 голос
/ 31 декабря 2008

Я согласен с @ duffymo.myopenid.com, что установка на сервере приложений веб-сервера, который предоставляет статический контент для определенных префиксов URL, является хорошим, чистым решением.

Если это невозможно в вашей среде или если вы решили, что предпочитаете обрабатывать это в самом веб-приложении, вы можете написать сервлет, который эффективно делает то же самое. Например, создайте сервлет, который сопоставлен с шаблоном URL / documents / *. Этот сервлет может анализировать URL (/documents/some/file.png), чтобы определить относительное имя файла (some / file.png). Затем он может прочитать и вернуть соответствующее содержимое, найденное во внешнем каталоге (/staticDocs/some/file.png).

1 голос
/ 31 декабря 2008

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

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

В Apache Tomcat иногда может быть целесообразно добиться повторного использования через tomcat RewriteValve , например:

META-INF / context.xml:

<Context>
  <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>

WEB-INF / rewrite.config:

RewriteRule (.*)/login(/.*\.)(png|jpg|js|css) $1$2$3 

Теперь путь /appContext/login/ будет использовать те же изображения / js / css, что и /appContext/

Конечно, как и во всех решениях ЛЮБОЙ проблемы на основе регулярных выражений, поддержание низкой сложности выражения важно для производительности.

0 голосов
/ 31 декабря 2008

Как насчет создания на вашем сервере переменной среды, которая указывает на каталог, в котором хранятся файлы? Переменная среды может работать лучше, чем параметр в вашем файле WAR, поскольку вы можете развернуть свое приложение в новой среде (возможно, перейдя из DEV в PROD) без изменения файла WAR.

Из вашего Java-кода вы можете ссылаться на этот параметр среды: String docPath = System.getProperty ("DOC_PATH");

0 голосов
/ 31 декабря 2008

Многие веб-серверы Java поддерживают «взорванные военные файлы», когда вы просто распаковываете свой .war-файл в каталог развертывания. С tomcat вы копируете это в $CATALINA_HOME/webapps и все готово.

Это должно сработать для вас.

0 голосов
/ 31 декабря 2008

К сожалению, для вас .war-файлы - это файлы .zip, а файлы .zip не поддерживают символические ссылки. Если вы развертываете ТОЛЬКО на Windows-машине, вам может повезти с помощью файла ярлыка. Однако я не уверен, понравится ли этому серверу приложений (... вероятно, нет.)

Я бы порекомендовал добавить в приложение параметр конфигурации, который позволяет указывать полный путь к папке с документами. Путь по умолчанию должен быть относительным («./www/files/documents»), чтобы приложение работало «из коробки» без дополнительной настройки.

0 голосов
/ 31 декабря 2008

По сути, это веб-приложение, которое собирает информацию из различных источников и генерирует документы. Требуется, чтобы пользователи имели возможность создавать и выгружать документы вручную из сети без входа в веб-приложение.

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

0 голосов
/ 31 декабря 2008

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

В противном случае, если нужно знать, что там, вы всегда можете создать файл jnlp динамически и передать списки файлов и т. Д. В качестве аргументов (если они на стороне сервера).

Думаю, нам нужно узнать немного больше о том, чего ты пытаешься достичь.

0 голосов
/ 31 декабря 2008

Похоже, вам нужна система управления веб-контентом ( CMS ).

...