manager - user xml tomcat
¿Cómo cambiar HTML/JS/CSS sin reiniciar Tomcat? (7)
¿Es posible configurar Tomcat de tal forma que se busque en una ubicación separada para mi directorio ''webapp'' mientras estoy en desarrollo?
Tengo mi fuente git en un directorio y tomcat instalado en otro. No quiero tener que hacer cambios en dos lugares, copiar archivos manualmente o reconstruir / implementar cada vez que hago un cambio simple a CSS o Javascript.
EDITAR - 21/02/2013Desafortunadamente, ninguna de las sugerencias funcionó y sospecho que puede deberse a que no proporcioné suficiente información sobre cómo tengo las cosas expuestas.
Tengo Tomcat instalado en un directorio de mi directorio de inicio (estoy en una Mac) llamado "Desarrollo".
/Users/dbrogdon/Development/apache-tomcat-7.0.35
Tengo mi fuente git al lado de eso.
/Users/dbrogdon/Development/myproject
En el directorio myproject, mis archivos web reales se encuentran en:
/Users/dbrogdon/Development/myproject/application/appname/src/main/webapp
Cuando compilo puse el appname.war en
/Users/dbrogdon/Development/apache-tomcat-7.0.35/webapps
Sobre la base de esa información actualizada, ¿qué debo proporcionar como mi base de documentos en conf/server.xml
o conf/Catalina/localhost/appname.xml
?
Actualice su server.xml y modifique el "host" de su aplicación para dos propósitos:
1) Para apuntar a su directorio fuente de git para que Tomcat inicie su aplicación desde. Esto evitaría tener que realizar cambios en dos lugares o copiar sobre los cambios.
Cambio requerido : actualice el "host" de su aplicación y configure ''appBase'' en su directorio de origen de git.
<Host name="localhost" appBase="/Users/dbrogdon/Development/myproject/application/appname/src/main/webapp"
unpackWARs="true" autoDeploy="true">
2) Agregue una ubicación separada para servir su contenido estático. Esto le ayudaría a evitar reiniciar Tomcat cada vez que cambie su css / js
Cambio requerido : agregue contextos para servir a sus js y 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>
El uso de una ubicación separada debería ser posible mediante la definición de un contexto adicional. Consulte http://www.coderanch.com/t/474965/Tomcat/Deploying-application-webapps-tomcat y http://tomcat.apache.org/tomcat-6.0-doc/config/context.html .
En su instalación de Tomcat, en el directorio "conf", encontrará un archivo server.xml. En ese archivo busca la etiqueta "Host". Encontraras algo como
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
Cambie appbase a la carpeta principal de su directorio de aplicaciones web. Por lo tanto, el directorio "myapp" de su aplicación se encuentra debajo de c: / git / source, ponga appBase como "c: / git / source"
Reinicie su gato. Ahora su tomcat buscará en "c: / git / source" todas las aplicaciones web que tiene que implementar en lugar de aplicaciones web
Enlace a la configuración de tomcat que describe el uso de appbase http://tomcat.apache.org/tomcat-7.0-doc/config/host.html
El directorio de Application Base para este host virtual. Esta es la ruta de acceso de un directorio que puede contener aplicaciones web que se implementarán en este host virtual. Puede especificar una ruta de acceso absoluta o una ruta de acceso relativa al directorio $ CATALINA_BASE . Consulte Implementación automática de aplicaciones para obtener más información sobre el reconocimiento automático y la implementación de aplicaciones web. Si no se especifica, se utilizará el valor predeterminado de webapps .
Posibles maneras de hacer lo que estás esperando
- Configuración del servidor web Apache para servir contenido estático y enrutar el contenido dinámico al servidor Tomcat. Esto se hace utilizando el conector mod jk, que distribuye la solicitud JSP a Tomcat, pero pasa este proxy para servir contenido estático como imagen, js, etc.
Hecho utilizando en worker.properties
<Location *>
SetHandler jakarta-servlet
SetEnvIf REQUEST_URI /.(html|png|gif|jpg|css|js)$ no-jk
</Location>
Esto podría no ser recomendable ya que cambia toda la arquitectura de su implementación
- La solución que Zenil ha propuesto para configurar server.xml en su configuración.
La limitación será que todas las aplicaciones que se implementan en su Tomcat se servirán desde D:/newWebApps
. Esto podría no servir a su propósito ya que solo necesita la aplicación que está en su repositorio de Source para ser mapeada con su Tomcat.
- Creo que lo siguiente será más apropiado para usted en el escenario dado.
Cree un archivo applicationName.xml
y defina lo siguiente
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:/newWebApps" path="/js/*" />
y ponga este archivo en su directorio /conf/Catalina/localhost
. El tomcat lo recogerá automáticamente.
Ahora puedes acceder a esto por
http://servername:8080/applicationName/js/anything.js
Consulte este http://tomcat.apache.org/tomcat-7.0-doc/config/context.html para obtener más detalles sobre la configuración de docBase fuera de los directorios predeterminados de Tomcat
Puede usar un servidor Apache local y reescribir los archivos HTML / CSS / JS / para que se recojan desde una ubicación separada.
Vea esta pregunta para ver un ejemplo de cómo reescribir archivos JS: CÓMO: ¿reescribir las solicitudes de imágenes, css y js en carpetas diferentes para cada aplicación?
Ahora puede configurar Apache para que vaya a Tomcat para las URL de tomcat, pero realice estas reescrituras en la configuración de apache y los archivos css / js / html se pueden seleccionar de una carpeta diferente por completo.
Es posible que pueda usar este filtro de Tomcat: http://tuckey.org/urlrewrite/ , aunque aún necesitaría un servidor web Apache para alojar los archivos estáticos, podría usar Tomcat para acceder a las URL principales de Tomcat y agregar redirecciones a Tu instancia de apache para todos los archivos estáticos. Esto ahorra tener que configurar mod_jk o algo con Apache.
Si entiendo bien la pregunta, solo quiere que webapps / MY_WEBAPP de Tomcat apunte hacia el interior donde verificó su repositorio de git, para que pueda modificarlos "una vez". Suponiendo que solo estás editando recursos estáticos, no creo que Tomcat los almacene en caché, por lo que puedes crear un enlace simbólico desde las aplicaciones web de tomcat a la ubicación de la carpeta git. O enlace simbólico desde webapps / x / y de vuelta a su carpeta equivalente de git (o incluso archivos específicos).
También escuché el rumor de que tomcat puede "hotswap" clases JSP y estáticas, así que en caso de que sea relevante: cómo habilitar la implementación en caliente en tomcat
cuando se abre el código fuente de git en IDE, después de agregar el servidor tomcat, puede configurar el ''Runtime Environment'' de tomcat para que se refiera al de su directorio tomcat.