Tengo el archivo de guerra de mi aplicación. Necesito implementar esto en el nivel raíz. La URL actual es http://localhost:8080/war_name/application_name.
¿Podría especificar cuál es exactamente su problema? Cuando despliega un archivo war en tomcat, se accede a la aplicación usando URL: localhost: 8080 / war_name sin la extensión .war.
ashishjmeshram
1
Sí, tienes razón, necesito acceder a mi aplicación. " Localhost / application_name ", esto puedo acheive cuando estoy el cambio de nombre de mi archivo de la guerra a "ROOT.war", pero su tirando excepción de memoria insuficiente debido a mi tamaño del archivo de la guerra es de alrededor de 120 MB
iamjustcoder
1
@ user661660 - Parece que tienes un problema diferente: cambiar el nombre a ROOT.wardebería funcionar. Sugeriría hacer otra pregunta sobre usted OutOfMemoryException, proporcionando el seguimiento de la pila y los detalles. Probablemente pueda evitarlo configurando -Xmxla JVM.
Rob Hruska
.lang.OutOfMemoryError: PermGen space 16 de marzo de 2011, 9:52:52 a.m. "java.lang.OutOfMemor yError: PermGen space Excepción en el hilo" MetricsSnapshotScheduler "java.lang.OutOfMemoryError: PermG en space 16 de marzo de 2011 9:53:36 a.m. com.ebay.kernel.logger. thread java.lang.OutOfMemoryError: PermGen space Excepción en el thread "CalClient: NotifyThreadDestroyThread-0" java.lang.OutOfMemor yError: PermGen space
Si Tomcat está configurado para desplegarse automáticamente, no tiene que preocuparse por la opción 2.
Buhake Sindi
44
@Dejel: nada técnicamente. Lo he hecho bastante yo mismo; Se hace el trabajo. Simplemente se siente un poco raro tener que cambiar el nombre de su propio archivo de guerra a algo que sea una especie de detalle de implementación del contenedor.
Rob Hruska
44
Según el enlace que proporcionó NO se recomienda colocar elementos <Context> directamente en el archivo
server.xml
66
Esta respuesta recomienda una técnica que se menciona explícitamente en la documentación como mala forma. La técnica adecuada se detalla aquí: stackoverflow.com/questions/41263245/…
Christopher Schultz
55
+1 por llamarlo ROOT.war. De acuerdo con los documentos de Tomcat, debe tener mucho cuidado al especificar "ruta" para evitar la doble implementación: "Incluso cuando se define estáticamente un Contexto en server.xml, este atributo no debe establecerse a menos que docBase no se encuentre debajo del Host appBase o deployOnStartup y autoDeploy son falsos. Si no se sigue esta regla, es probable que se produzca una doble implementación ". - de tomcat.apache.org/tomcat-8.0-doc/config/context.html
Anthony Hayward
31
en tomcat v.7 (instalación de vainilla)
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 que 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 webapp desempaquetada (app_name) en la carpeta webapps de su tomcat. Inicio, visite root, vea su nombre_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>
Una ruta de contexto debe ser una cadena vacía o comenzar con un '/'. La ruta [ROOT] no cumple con estos criterios y se ha cambiado a [/ ROOT]
Nikita Bosik
11
Sé que mi respuesta se superpone con alguna 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 de guerra 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 superusuario para vincularse a 80, pero en Windows esto no es un problema).
Esto significa que solo tiene que reiniciar el tomcat una vez, y después de que los archivos de guerra actualizados se puedan implementar sin problemas.
Paso 1: en el archivo server.xml, busque la entrada del conector y reemplácela con:
Tenga en cuenta que me dirigí a todas las aplicaciones en la carpeta webapp. El primero cambia efectivamente la raíz y la aplicación principal desde la posición. ROOT ahora está activado http://example.com/ROOTy la aplicación principal está activada http://example.com/. Las aplicaciones web que están 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 el <Context path="/CAS" docBase="CAS">en sus contextos ya que deshabilita la opción del administrador para desplegar archivos de guerra. Esto significa que puede 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 de administrador, agregue una valvea esas etiquetas de contexto como esta:
Esto esencialmente limita el acceso a la carpeta de la aplicación web de administración a las 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 usar esto para múltiples aplicaciones que usan diferentes direcciones IP, puede agregar la dirección IP al conector ( address="143.21.2.1").
Si desea ejecutar múltiples aplicaciones web desde la raíz, puede duplicar la etiqueta de Servicio (use un nombre diferente para el segundo) y cambiar la base de documentos de <Context path="/" docBase="CAS">a, por ejemplo <Context path="/" docBase="ICR">.
Intenté subir la WAR y no funcionó. ¿Es esto solo para los WAR explotados?
logixplayer
Intenté subir la WAR y no funcionó según el ejemplo de @ Jingguo. ¿Es esto solo para los WAR explotados? EDITAR: De hecho, es SOLO para guerras explotadas. ¿Por qué es esto? ¿No puedo simplemente cargar WAR y evitar este doble paso? ¿Cómo puedo hacer que funcione?
logixplayer
@logixplayer. Mi solución funciona con WAR. No lo exploté. Olvidé mencionar que $CATALINA_HOME/webapps/ROOTes necesario eliminarlo. Elimínelo e intente nuevamente.
Jingguo Yao
Quité la RAÍZ como dijiste. Implementé mi WAR (directorio no explotado). Noté que se creó un nuevo directorio ROOT con mis cosas, por ejemplo, WEB-INF. El sitio está funcionando. ¿Es así como se supone que funciona?
logixplayer
También probé este método y todo cuando intento abrir la página en el navegador simplemente sigue esperando al servidor. El catalina.out solo dice que el servidor se inició.
Asu
1
Agregando al sol de @Rob Hruska, esta configuración en server.xml dentro de la sección funciona:
No mencionaste dónde poner esto. La respuesta de @Sudheer Palyam fue útil.
Kannan Ramamoorthy
1
Agregando a la respuesta de @Dima , si está utilizando mavenpara construir su paquete, puede decirle que configure su nombre de archivo WAR ROOTen pom.xml:
<build><finalName>ROOT</finalName></build>
Por defecto, tomcatdesplegará la aplicación ROOT.warweb en el contexto raíz ( /).
Abra la URL del administrador de tomact: - http: // localhost: 8080 / manager / html /
luego, en las aplicaciones, verá que una aplicación que tiene una ruta como "/" se implementa simplemente Despliegue esto. Cambie el nombre del archivo war de su aplicación como ROOT.war y simplemente colóquelo en la ruta: -
inicie su Tomcat No se necesita configuración adicional.
Ahora podemos ver la página de inicio de nuestra aplicación o la URL configurada en http: // localhost: 8080 C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
ROOT.war
debería funcionar. Sugeriría hacer otra pregunta sobre ustedOutOfMemoryException
, proporcionando el seguimiento de la pila y los detalles. Probablemente pueda evitarlo configurando-Xmx
la JVM.Respuestas:
Tienes unas cuantas opciones:
Elimine el
ROOT/
directorio listo para usar de tomcat y cambie el nombre de su archivo warROOT.war
antes de implementarlo.Despliegue su guerra como (a partir de su ejemplo)
war_name.war
y configurar la raíz de contexto enconf/server.xml
utilizar el archivo de la guerra:El primero es más fácil, pero un poco más torpe. La segunda es probablemente la forma más elegante de hacerlo.
fuente
en tomcat v.7 (instalación de vainilla)
en su conf / server.xml agregue el siguiente bit hacia el final del archivo, justo antes de la
</Host>
etiqueta de cierre:Tenga en cuenta que 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 webapp desempaquetada (app_name) en la carpeta webapps de su tomcat. Inicio, visite root, vea su nombre_aplicación allí.
fuente
En Tomcat 7 con estos cambios, puedo acceder a myAPP en / y ROOT en / ROOT
Agregue arriba a la
<Host>
sección en server.xmlfuente
Sé que mi respuesta se superpone con alguna de las otras respuestas, pero esta es una solución completa que tiene algunas ventajas. Esto funciona en Tomcat 8:
Esto significa que solo tiene que reiniciar el tomcat una vez, y después de que los archivos de guerra actualizados se puedan implementar sin problemas.
Paso 1: en el archivo server.xml, busque la entrada del conector y reemplácela con:
Paso 2: definir contextos dentro de la
<Host ...>
etiqueta:Tenga en cuenta que me dirigí a todas las aplicaciones en la carpeta webapp. El primero cambia efectivamente la raíz y la aplicación principal desde la posición. ROOT ahora está activado
http://example.com/ROOT
y la aplicación principal está activadahttp://example.com/
. Las aplicaciones web que están protegidas con contraseña requieren elprivileged="true"
atributoCuando 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 el
<Context path="/CAS" docBase="CAS">
en sus contextos ya que deshabilita la opción del administrador para desplegar archivos de guerra. Esto significa que puede 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 de administrador, agregue una
valve
a esas etiquetas de contexto como esta:Esto esencialmente limita el acceso a la carpeta de la aplicación web de administración a las 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 usar esto para múltiples aplicaciones que usan diferentes direcciones IP, puede agregar la dirección IP al conector (
address="143.21.2.1"
).Si desea ejecutar múltiples aplicaciones web desde la raíz, puede duplicar la etiqueta de Servicio (use un nombre diferente para el segundo) y cambiar la base de documentos de
<Context path="/" docBase="CAS">
a, por ejemplo<Context path="/" docBase="ICR">
.fuente
La vía más rápida.
Asegúrese de no tener implementada la aplicación ROOT, anule la implementación si tiene una
Cambie el nombre de su guerra a ROOT.war, despliegue, eso es todo, no se necesitan cambios de configuración
fuente
Remover
$CATALINA_HOME/webapps/ROOT
. Actualización$CATALINA_HOME/conf/server.xml
, asegúrese de que el elemento Host se vea como el siguiente texto:Funciona con Tomcat 8. AutoDeploy y deployOnStartup deben establecerse en falso para evitar que Tomcat se implemente
myApp
dos veces.fuente
$CATALINA_HOME/webapps/ROOT
es necesario eliminarlo. Elimínelo e intente nuevamente.Agregando al sol de @Rob Hruska, esta configuración en server.xml dentro de la sección funciona:
Nota: override = "true" puede ser necesario en algunos casos.
fuente
Agregando a la respuesta de @Dima , si está utilizando
maven
para construir su paquete, puede decirle que configure su nombre de archivo WARROOT
enpom.xml
:Por defecto,
tomcat
desplegará la aplicaciónROOT.war
web en el contexto raíz (/
).fuente
Abra la URL del administrador de tomact: - http: // localhost: 8080 / manager / html /
luego, en las aplicaciones, verá que una aplicación que tiene una ruta como "/" se implementa
simplemente Despliegue esto. Cambie el nombre del archivo war de su aplicación como ROOT.war y simplemente colóquelo en la ruta: - inicie su Tomcat No se necesita configuración adicional. Ahora podemos ver la página de inicio de nuestra aplicación o la URL configurada en http: // localhost: 8080
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
fuente
En mi servidor estoy usando esto y el autodespliegue de raíz funciona bien:
fuente