¿Cómo cambiar la aplicación ROOT?

130

Estoy tratando de cambiar la aplicación predeterminada de un servidor web Tomcat 6 a una aplicación diferente a "ROOT" (dentro de la carpeta webapps). ¿Cuál es la mejor manera de hacer esto?

usuario247702
fuente

Respuestas:

129

Hay tres métodos:

  • Primero apague su Tomcat desde su bindirectorio ( sh shutdown.sh). Luego, elimine todo el contenido de su webappscarpeta Tomcat ( rm -fr *). Luego cambie el nombre de su archivo WAR ROOT.wary finalmente inicie su Tomcat desde el bindirectorio ( sh startup.sh).

  • Deje su archivo de guerra $CATALINA_BASE/webappscon su nombre original. Desactive autoDeploy e deployOnStartup en su elemento Host en el server.xmlarchivo. Defina explícitamente todos los contextos de aplicación en server.xml, especificando los atributos de ruta y docBase . Debe hacerlo porque ha deshabilitado todos los mecanismos de implementación automática de Tomcat, y Tomcat ya no implementará sus aplicaciones a menos que encuentre su contexto en el server.xml.

    segundo método: para realizar cualquier cambio en cualquier aplicación, deberá detener y reiniciar Tomcat.

  • Coloque su archivo WAR fuera de $CATALINA_BASE/webapps(debe estar afuera para evitar una doble implementación). Coloque un archivo de contexto nombrado ROOT.xmlen $CATALINA_BASE/conf/. El elemento único en este archivo de contexto DEBE tener un atributo docBase que apunte a la ubicación de su archivo WAR. El elemento de ruta no debe establecerse .xml; en este caso , se deriva del nombre del archivo ROOT.xml. Consulte la documentación del Contexto contenedor para más detalles.

Referencia


fuente
44
¡Probé el primer método y funciona! Bdw: NO es necesario eliminar todo. Acabo de eliminar la carpeta ROOT y renombré mi guerra a ROOT.war y funciona de maravilla.
hostnik
Sé que realmente no está siguiendo las reglas de software, pero joder ... ¡Gracias! Desearía poder votar más de una vez. Súper servicial Por cierto, tuve que reiniciar tomcat antes de que esto funcionara, @hostnik.
pastoso desagradable
El tercer método de @ danny-london no funcionó para mí en Tomcat 7, pero funciona si coloca el archivo ROOT.xml en el $CATALINA_BASE/conf/[enginename]/[hostname]directorio (que para mi configuración bastante básica es $CATALINA_HOME/conf/Catalina/localhost). Consulte la documentación del Contexto Context .
Michael Scheper
Alternativa moderna a iniciar Tomcat: sudo systemctl start tomcatxdonde se xencuentra el número de versión
EarthMind
24

Agregar una <Context>etiqueta en la <Host>etiqueta server.xmlpara Tomcat 6 resolverá el problema.

Si usa path=""vacío, puede usar una URL como http://localhost/first.do.

En la etiqueta de contexto, configure los atributos docBase="E:\struts-ITRCbook\myStrutsbook"y reloadable="true", a continuación, finalice la etiqueta de contexto.

Debería verse más o menos así:

<Host name="localhost"  appBase="webapps" 
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
    </Context>
</Host>
ze.
fuente
¿Es esto también cierto para Tomcat 7?
Marcy Sutton
44
Según la documentación: para Tomcat 6, a diferencia de Tomcat 4.x, NO se recomienda colocar elementos <Context> directamente en el archivo server.xml. Esto se debe a que hace que la modificación de la configuración de contexto sea más invasiva ya que el archivo principal conf / server.xml no se puede volver a cargar sin reiniciar Tomcat.
¡notifiquemos que este enfoque tiene efectos secundarios! ¡myStrutsbook se desplegará dos veces Una vez para localhost: 8080 y una vez para localhost: 8080 / myStrutsbook! y puede causar errores de conexión de base de datos y más uso de recursos
Ali.Mojtehedy
24

En Tomcat 7 con estos cambios, puedo acceder myAPPen /y ROOTen/ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

Agregue arriba a la <Host>sección en server.xml

De repente Palyam
fuente
Justo la solución que estaba buscando! ¡Un millón de gracias, Sudheer! Funciona como un encanto para mí. Y oye! Tengo otra pregunta. Cuando accedo a ROOT /ROOTe intento iniciar sesión en la página del Administrador con las credenciales correctas, se me niega el acceso. ¿Sabrías cómo solucionar esto?
Saturno
@Sudheer Palyam, hice lo mismo. Cambié el archivo server.xml y luego inicié el servidor. Pero cuando cargué / visité el localhost: 8080, me mostró un error de estado 404. Si elimino estas líneas de server.xml, entonces carga el puerto anterior.
Sachin Kumar
16

La aplicación predeterminada de ROOT suele ser Tomcat Manager, lo que puede ser útil, así que tuve ganas de mantenerlo.

Así que la forma en que hice mi aplicación ROOT y mantuve TCmgr fue así.

renombró ROOT a otra cosa

mv ROOT TCmgr

luego creó un enlace simbólico mediante el cual ROOT apunta a la aplicación que quiero que sea la predeterminada.

ln -s <your app> ROOT

funcionó para mí y parecía el enfoque más fácil.

nestochan
fuente
@Vic tienes razón, pero Windows tiene enlaces simbólicos, en XP y superiores creo que puedes usar mklink. Tenga en cuenta que no he hecho esto y puede haber otras razones para no usar enlaces simbólicos.
MichaelStoner
12

Puede hacer esto de una manera ligeramente pirata:

  1. Detener a Tomcat
  2. Mueva ROOT.war a un lado y rm -rf webapps / ROOT
  3. Copie la aplicación web que desea webapps / ROOT.war
  4. Iniciar Tomcat
gareth_bowles
fuente
2
Feo o asqueroso, pero hacky podría ser el término incorrecto, ya que parece ser el método oficial / compatible.
Brian Knoblauch
3

Una solución alternativa sería crear un servlet que envíe una redirección a la aplicación web predeterminada deseada y asignar ese servlet a todas las URL en la aplicación web ROOT.

package com.example.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.sendRedirect("/myRootWebapp");
  }
}

Agregue la clase anterior a
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet.
Y agregue lo siguiente a
CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml:

  <servlet>
    <display-name>Redirect</display-name>
    <servlet-name>Redirect</servlet-name>
    <servlet-class>com.example.servlet.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

Y si lo desea, puede modificar fácilmente el RedirectServlet para aceptar un parámetro de inicio que le permita configurar la aplicación web predeterminada sin tener que modificar la fuente.

No estoy seguro de si hacer esto tendría implicaciones negativas, pero lo probé y parece funcionar.

Jonathan Dixon
fuente
2

la configuración context.xml no funcionó para mí. Tomcat 6.0.29 se queja de que docBase está dentro de appBase: ... Para Tomcat 5, esto realmente funcionó.

Entonces, una solución es colocar la aplicación en la carpeta ROOT.

Otra solución muy simple es poner un index.jsp a ROOT que redirija a mi aplicación de esta manera: response.sendRedirect ("/ MyApplicationXy");

Saludos cordiales, Jan

ene
fuente
1

La mejor manera de cambiar la aplicación raíz de Tomcat. Probado en Tomcat 7 y 8.

  1. Vaya al directorio de tomba webapps:

    Ejemplo en mi máquina: ~/stack/apache-tomcat/webapps

  2. Cambiar el nombre, reemplazar o eliminar la carpeta ROOT. Mi consejo es renombrar o crear una copia de respaldo. Ejemplo renombrar ROOT a RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. Mueva el archivo war con su aplicación al directorio tomcat webapps (es un directorio donde estaba la carpeta ROOT antigua, en mi máquina: ~ / stack / apache-tomcat / webapps)

El archivo de guerra debe tener un nombre ROOT.war . Cambie el nombre de su aplicación si es necesario: yourApplicationName.war -> ROOT.war

  1. Reinicie tomcat. Después de reiniciar su aplicación será una raíz.
Jackkobec
fuente
0

Veré mis documentos; hay una manera de especificar una configuración para cambiar la ruta de la aplicación web raíz lejos de ROOT (o ROOT.war), pero parece haber cambiado entre Tomcat 5 y 6.

Encontró esto:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html

Por lo tanto, parece que es posible cambiar la ruta raíz (en ROOT.xml), pero un poco roto: debe mover su WAR fuera del directorio de implementación automática. ¿Te importa si te pregunto por qué simplemente renombrar tu archivo a ROOT.war no es una solución viable?

Don Werve
fuente
1
Desafortunadamente, cambiar el archivo de guerra a ROOT.war no es una opción para mí. Jacques
un poco tarde, pero ... para mí no puedo cambiarlo porque estoy usando un sistema creado por un tercero, que parece haber codificado algunas ubicaciones para archivar archivos ... así que moverlo a ROOT.war hace un problema, ya que la aplicación original busca su propio jar en un directorio que está en [originalapp.war]
mur
0

No es una muy buena solución, pero una forma es redirigir desde la aplicación ROOT a YourWebApp. Para esto necesita modificar el ROOT index.html.

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

O

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
        <meta http-equiv="refresh" content="0;url=YourWebApp" />
    </head>
    <body>
    </body>
</html>

Referencia: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

abbas
fuente
-4

En Tomcat 7 (bajo el servidor de Windows) no agregué ni edité nada en ningún archivo de configuración. Acabo de cambiar el nombre de la carpeta ROOT a otra cosa y cambié el nombre de mi carpeta de aplicación a ROOT y funcionó bien.

Dov
fuente
1
Esta podría ser una buena solución, pero la pregunta de Jaques es acerca de cómo cambiar la aplicación predeterminada; Puede haber razones por las cuales no puede cambiar el contenido de la carpeta ROOT.
JVMATL