Как изменить HTML/JS/CSS без перезапуска Tomcat?

Можно ли настроить Tomcat таким образом, чтобы он выглядел в отдельном месте для моего каталога "webapp" во время разработки?

У меня есть источник git в одном каталоге, а tomcat - в другом. Я не хочу делать изменения в двух местах, или вручную копировать файлы, или перестраивать/развертывать каждый раз, когда я делаю простые изменения в CSS или Javascript.


РЕДАКТИРОВАТЬ - 2/21/2013

К сожалению, ни одно из предложений не срабатывало, и я подозреваю, что это может быть потому, что я не предоставил достаточной информации о том, как я сложил вещи.

У меня есть Tomcat, установленный в каталоге моего домашнего каталога (я нахожусь на Mac) под названием "Разработка".

/Users/dbrogdon/Development/apache-tomcat-7.0.35

У меня есть источник git рядом с ним.

/Users/dbrogdon/Development/myproject

В каталоге myproject мои фактические веб файлы находятся в:

/Users/dbrogdon/Development/myproject/application/appname/src/main/webapp

Когда я компилирую, я помещаю appname.war в

/Users/dbrogdon/Development/apache-tomcat-7.0.35/webapps

Основываясь на этой обновленной информации, что мне следует предоставлять в качестве моей docBase в моих conf/server.xml или conf/Catalina/localhost/appname.xml?

Ответ 1

Вы можете использовать локальный сервер Apache и переписывать файлы HTML/CSS/JS/, которые нужно выбрать из отдельного места.

См. этот вопрос для примера, как переписать JS файлы: HOWTO: переписать запросы на изображения, css и js в разные папки для каждого приложения?

Теперь вы можете настроить Apache на Tomcat для URL-адресов tomcat, но выполнить эти перезаписи в файле apache, а css/js/html файлы можно получить из другой папки целиком.

Возможно, вы сможете использовать этот фильтр Tomcat: http://tuckey.org/urlrewrite/, хотя вам все равно нужен веб-сервер Apache для размещения статического файлов, вы можете использовать Tomcat для доступа к основным URL-адресам tomcat и добавлять перенаправления к вашему экземпляру apache для всех статических файлов. Это экономит необходимость настройки mod_jk или чего-то с Apache.

Ответ 2

В вашей установке tomcat в каталоге "conf" вы найдете файл server.xml. В этом файле найдите тег "Host". Вы найдете что-то вроде

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

Измените appbase на родительскую папку вашего каталога веб-приложений. Скажите, что ваше приложение "myapp" находится в каталоге c:\ git\source, поместите appBase как "c:\git\источник"

Перезапустите свой tomcat. Теперь ваш tomcat будет выглядеть внутри "c:\ git\source" для всех веб-приложений, которые он должен развернуть вместо webapps

Ссылка на конфигурацию tomcat, описывающую использование приложения http://tomcat.apache.org/tomcat-7.0-doc/config/host.html

Каталог Application Base для этого виртуального хоста. Это путь к каталогу, который может содержать веб-приложения развернутых на этом виртуальном хосте. Вы можете указать абсолютный путь, или путь, относящийся к каталогу $CATALINA_BASE. Видеть Автоматическое развертывание приложений для получения дополнительной информации об автоматическом распознавание и развертывание веб-приложений. Если не указано,используется значение по умолчанию для webapps.

Ответ 3

Возможные способы сделать то, что вы ожидаете

  • Настройка веб-сервера Apache для обслуживания статического содержимого и маршрутизации динамического содержимого на сервер Tomcat. Это делается с помощью соединителя мод jk, который проксирует запрос JSP для tomcat, но пропускает этот прокси для обслуживания статического содержимого, такого как изображение, js и т.д.

Выполняется с помощью worker.properties

<Location *>
SetHandler jakarta-servlet
SetEnvIf REQUEST_URI \.(html|png|gif|jpg|css|js)$ no-jk
</Location>

Это может быть нежелательно, поскольку оно изменяет всю архитектуру развертывания.

  • Решение, которое Zenil предлагает настроить server.xml в conf

Ограничение будет заключаться в том, что все приложения, развернутые в вашем tomcat, будут обслуживаться с помощью D:/newWebApps. Это может не служить вашей цели, поскольку вам нужно только приложение, находящееся в вашем репозитории Source, сопоставляться с вашим tomcat,

  • Я думаю, что ниже будет более подходящим для вас в данном Сценарий

Создайте файл applicationName.xml и определите следующие

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\newWebApps" path="/js/*" />

и поместите этот файл в каталог \conf\Catalina\localhost. Tomcat автоматически подберет это.

Теперь вы можете получить доступ к этому с помощью

http://servername:8080/applicationName/js/anything.js

Обратитесь к http://tomcat.apache.org/tomcat-7.0-doc/config/context.html для получения дополнительной информации о настройке docBase внешних директив tomcat по умолчанию

Ответ 4

Обновите свой server.xml и измените "хост" для своего приложения в двух целях:

1) Чтобы указать на исходный каталог git для tomcat, чтобы запустить приложение. Это позволит избежать внесения изменений в двух местах или копирования изменений.

Необходимое изменение: обновите "хост" для вашего приложения и установите "appBase" в исходный каталог git.

<Host name="localhost"  appBase="/Users/dbrogdon/Development/myproject/application/appname/src/main/webapp"
            unpackWARs="true" autoDeploy="true">

2) Добавьте отдельное место для обслуживания вашего статического контента. Это поможет вам избежать перезапуска tomcat каждый раз, когда вы меняете свой css/js

Необходимое изменение: добавьте контексты для обслуживания js и css

<Host name="localhost"  appBase="/Users/dbrogdon/Development/myproject/application/appname/src/main/webapp"
            unpackWARs="true" autoDeploy="true">
    <Context docBase="/Users/dbrogdon/Development/myproject/application/appname/src/main/webapp/js/" path="/js/*" />
    <Context docBase="/Users/dbrogdon/Development/myproject/application/appname/src/main/webapp/css/" path="/css/*" />
</Host>

Ответ 5

Если я правильно понимаю вопрос, вы просто хотите, чтобы tomcat webapps/MY_WEBAPP указывал внутри, где вы проверили свой репозиторий git, чтобы вы могли их модифицировать "один раз". Предполагая, что вы только редактируете статические ресурсы, я не думаю, что tomcat кэширует их, чтобы вы могли уйти от создания символической ссылки из tomcat webapps/в папку git. Или символическая ссылка из webapps/x/y обратно в вашу эквивалентную папку git (или даже определенные файлы).

Я также слышал слухи, что tomcat может "раскручивать" JSP-классы и статические, поэтому в случае, если это имеет значение: как включить горячее развертывание в tomcat

Ответ 7

когда исходный код git открывается в среде IDE, после добавления сервера tomcat вы можете настроить "среду выполнения" tomcat, чтобы ссылаться на ту, что находится в вашем каталоге tomcat.