Как изменить 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
Ответ 6
Использование отдельного местоположения должно быть возможным, определяя дополнительный контекст.
См. http://www.coderanch.com/t/474965/Tomcat/Deploying-application-webapps-tomcat и http://tomcat.apache.org/tomcat-6.0-doc/config/context.html.
Ответ 7
когда исходный код git открывается в среде IDE, после добавления сервера tomcat вы можете настроить "среду выполнения" tomcat, чтобы ссылаться на ту, что находится в вашем каталоге tomcat.