servidor localizado directorio desplegar context archivo java tomcat servlets tomcat6

java - localizado - desplegar war en tomcat 8



Desplegando el archivo war a Tomcat con una ruta diferente (3)

Hay un punto importante para enfatizar sobre el atributo de path de la definición del fragmento de contexto. Para citar la http://tomcat.apache.org/tomcat-7.0-doc/config/context.html :

Cuando un host realiza las operaciones autoDeploy o deployOnStartup, el nombre y la ruta de acceso al contexto de la aplicación web se derivan del nombre (s) del archivo (s) que define (s) la aplicación web.

deployOnStartup es el comportamiento predeterminado de los hosts Tomcat .

Para seguir la documentación, esto tiene una consecuencia muy importante:

la ruta de contexto puede no estar definida en un META-INF/context.xml

De acuerdo con las formas de definir un contexto de Tomcat , esto permite solo dos soluciones:

  • In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory
  • Inside a Host element in the main conf/server.xml , ¿qué es una solución desalentada en un entorno de producción, ya que requiere reiniciar el servidor?

Otra solución aprovecha el atributo unpackWARs .

Desde mi punto de vista, por estos motivos, la forma general y sencilla de implementar una ruta sutil en un entorno de producción es a través de la naming de naming a los archivos de guerra (lo que podría incluir la administración de versiones y ser una solución a su problema). Un solo sharp (por ejemplo, test # path.war ) en los nombres de los archivos de guerra implica un segmento en la ruta de contexto (por ejemplo, / test / ruta ). Un doble filo introduce el número de versión (por ejemplo, prueba # ruta ## 112.war ). Esto funciona ya sea que desempaquetar o no los archivos de guerra, la implementación en caliente o no, es independiente de la implementación (administrador o sistema de archivos) y administra versiones múltiples de un mismo archivo.

Pero si existe la necesidad de tener una ruta distinta del nombre del archivo comprimido, parece que la única solución es el descriptor en el directorio /conf/[enginename]/[hostname]/ o el archivo server.xml . Para estos, necesita un acceso al sistema de archivos del servidor.

La solución relevante está altamente relacionada con la forma en que Tomcat se configura y administra en el día a día.

Si implemento un archivo war en Tomcat, llamado por ejemplo foo-bar-1.1.2.war , ¿cómo puedo implementarlo para que se extraiga a webapps / bar y su raíz URL sea / bar / ... ?

Mi intención aquí es mantener el archivo war en el servidor webapps con su información de versión para que sepa qué versión está instalada, pero tengo que sobrescribir una versión anterior de la aplicación.

Podría desplegar el archivo war usando la sonda PSI . Esto me permitiría especificar un contexto de destino para la aplicación web. Sin embargo, significa que perdería cualquier información de versión en el nombre del archivo war.


Si solo desea incluir una información de la versión en el nombre de su archivo de guerra, puede nombrarla así: my-app##1.2.3.war . Se desempaqueta en el directorio my-app##1.2.3 pero el contexto será solo my-app (es decir, http://host/my-app/ ).

Funciona al menos con Tomcat 7.0.55.


Tomcat siempre extraerá el contenido de un archivo war, a una carpeta con el mismo nombre (cuando esté configurado para desplegar guerras, como predeterminado, etc.).

Puede extraerlo a la carpeta que prefiera. Entonces, si descomprime el contenido de foo.war en una carpeta llamada bar/ manualmente, en lugar de simplemente soltar la guerra en la carpeta de aplicaciones web, seguirá cargando la aplicación web.

Sin embargo, esto es totalmente innecesario, ya que puede especificar el patrón de URL de la aplicación sin alterar el nombre de la carpeta / archivo de guerra anulando el elemento raíz de contexto para su aplicación:

A menudo, esto se establece en el Tomcat server.xml , pero esta práctica está bastante desaconsejada. En su lugar, le sugiero que use context.xml en la carpeta META-INF de su aplicación web / archivo war:

<Context path="/bar" .../>

Cuando se implementa la aplicación, el context.xml debe copiar a /conf/Catalina/localhost pero se le debe foo.xml nombre a foo.xml

Tenga en cuenta que las raíces de conexión deben ser únicas y existen algunas consideraciones adicionales si está utilizando las operaciones autoDeploy o deployOnStartup (Source http://tomcat.apache.org/tomcat-7.0-doc/config/context.html ).

Otras opciones incluyen:

  • Limpie la carpeta de aplicaciones web en cada implementación y suelte su nueva guerra foo-1.1.0 .
  • Incluya el número de versión en un archivo plano. foo/version1
  • O simplemente incluya la versión en un archivo config / XML.

También puede usar Ant (o una herramienta equivalente) para automatizar sus implementaciones (y realizar cualquiera de las anteriores).