Implementando mi aplicación en la raíz en Tomcat
Tengo el archivo war de mi aplicación. Necesito implementar esto en el nivel raíz. La URL actual es http://localhost:8080/war_name/application_name
.
Tienes unas cuantas opciones:
Elimine el directorio listo para usar
ROOT/
de Tomcat y cambie el nombre de su archivo warROOT.war
antes de implementarlo.Implemente su guerra como (de su ejemplo)
war_name.war
y configure la raíz de contexto paraconf/server.xml
usar su archivo war:<Context path="" docBase="war_name" debug="0" reloadable="true"></Context>
El primero es más fácil, pero un poco más complicado. La segunda es probablemente la forma más elegante de hacerlo.
en Tomcat v.7 (instalación básica)
en su conf/server.xml agregue el siguiente bit hacia el final del archivo, justo antes de la </Host>
etiqueta de cierre:
<Context path="" docBase="app_name">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Tenga en cuenta el atributo docBase . Es lo importante. Puede asegurarse de haber implementado app_name antes de cambiar su aplicación web raíz, o simplemente copiar su aplicación web descomprimida (app_name) en la carpeta de aplicaciones web de su Tomcat. ¡Inicie, visite la raíz, vea el nombre de su aplicación allí!
En Tomcat 7 con estos cambios, puedo acceder a myAPP en / y ROOT en /ROOT
<Context path="" docBase="myAPP">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Agregue arriba a la <Host>
sección en server.xml
Sé que mi respuesta se superpone con algunas de las otras respuestas, pero esta es una solución completa que tiene algunas ventajas. Esto funciona en Tomcat 8:
- La aplicación principal se sirve desde la raíz.
- Se mantiene el despliegue de archivos war a través de la interfaz web.
- La aplicación principal se ejecutará en el puerto 80, mientras que solo los administradores tienen acceso a las carpetas de administración (me doy cuenta de que los sistemas *nix requieren un superusuario para vincularse al 80, pero en Windows esto no es un problema).
Esto significa que solo tiene que reiniciar Tomcat una vez y, después de actualizar, los archivos war se pueden implementar sin problemas.
Paso 1: en el archivo server.xml, busque la entrada del conector y reemplácela con:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Paso 2: Defina contextos dentro de la <Host ...>
etiqueta:
<Context path="/" docBase="CAS">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Tenga en cuenta que abordé todas las aplicaciones en la carpeta de aplicaciones web. El primero cambia efectivamente la raíz y la aplicación principal desde su posición. ROOT ahora está activado http://example.com/ROOT
y la aplicación principal está activada http://example.com/
. Las aplicaciones web protegidas con contraseña requieren el privileged="true"
atributo.
Cuando implementa un archivo CAS.war que coincide con la raíz ( <Context path="/" docBase="CAS">
debe volver a cargarlo en el panel de administración, ya que no se actualiza con la implementación).
No incluya <Context path="/CAS" docBase="CAS">
en sus contextos, ya que deshabilita la opción del administrador para implementar archivos war. Esto significa que puedes acceder a la aplicación de dos maneras: http://example.com/
yhttp://example.com/APP/
Paso 3: Para evitar el acceso no deseado a la carpeta raíz y del administrador, agregue a valve
esas etiquetas de contexto como esta:
<Context path="/manager" docBase="manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
addConnectorPort="true"
allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>
Básicamente, esto limita el acceso a la carpeta de la aplicación web de administración a personas de mi propio dominio (dirección IP falsa) y localhost cuando usan el puerto predeterminado 8080 y mantiene la capacidad de implementar dinámicamente los archivos war a través de la interfaz web.
Si desea utilizar esto para varias aplicaciones que utilizan diferentes direcciones IP, puede agregar la dirección IP al conector ( address="143.21.2.1"
).
Si desea ejecutar varias aplicaciones web desde la raíz, puede duplicar la etiqueta de servicio (use un nombre diferente para la segunda) y cambiar la base de documentos de, <Context path="/" docBase="CAS">
por ejemplo <Context path="/" docBase="ICR">
, .
Eliminar $CATALINA_HOME/webapps/ROOT
. Actualizar $CATALINA_HOME/conf/server.xml
, asegúrese de que el elemento Host se parezca al siguiente texto:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="false">
<Context path="" docBase="myApp"></Context>
Funciona con Tomcat 8. autoDeploy y desplegarOnStartup deben establecerse en falso para evitar que Tomcat se implemente myApp
dos veces.