2011-12-04 4 views
10

He leído sobre esto en la guía Tomcat here y algunas preguntas tan. Y creo que estoy haciendo lo mismo. Pero de alguna manera no puede lograr el éxito.¿Cómo establecer la ruta de contexto en Tomcat para poder ingresar al sitio sin agregar el nombre de la carpeta desplegada?

Antes que nada tengo que decir que mi aplicación se implementa en un servidor Tomcat compartido sobre el que no tengo control. Acabo de soltar mi archivo .war y se despliega.

Me trataron de empaquetar mi solicitud como ROOT.war pero no funcionó. El administrador me dijo que lo empaquetara como el nombre que quisiera y ellos se encargarían de eso. me he empaquetado como mi-application.war y se puso desplegado pero tengo que entrar en http://my-host/my-application para llegar a la página web.

Después de contactar con el administrador me dijeron que han puesto un elemnt contexto en mi anfitrión en el archivo de configuración de Tomcat como:

<Context path="" docBase="path of my-application deployed folder"/> 

que debía establecer mi aplicación como aplicación por defecto para todas las solicitudes vienen a my-host. Pero no fue así y siempre que entro http://my-host me sale:

HTTP Status 404 -/The requested resource (/) is not available 

Pero de nuevo cuando entro http://my-host/my-application todo funciona bien. Cualquier sugerencia sobre lo que podría estar mal es definitivamente apreciada.

actualizaciones:
He intentado seguir los pasos descritos en la documentación de Tomcat en how to make the application default. Se describen 3 maneras y probé las tres formas y pude implementar mi aplicación como ROOT en localhost.

También traté de reproducir el problema que estoy enfrentando en el servidor remoto para poder encontrar el motivo y reportarlo al administrador. Encuentro un par de problemas.

  1. En server.xml fragmento que me envió administrador AutoDeploy y deployOnStartUp se establecen en true, mientras que deberían ser falsa si la definición explícita de elemento de Contexto en server.xml. Esto causará una implementación doble que crea una carpeta ROOT y una carpeta con el nombre del archivo .war. Al eliminar el .war se eliminará la carpeta correspondiente y se anulará la aplicación, pero ROOT permanece y se debe eliminar manualmente y requiere un reinicio de Tomcat. Hasta que se reinicie, cualquier implementación de ROOT.war fallará.
  2. Pensé que hay algunas razones que impiden la implementación de ROOT.war. Uno podría ser que un ROOT.xml existe en conf/{motor de nombre}/{host-name} o existe una carpeta raíz en AppBase del host o como he descrito anteriormente una aplicación raíz del despliegue anterior no es sin desplegar y requiere Tomcat reinicio .

De cualquier forma no pude determinar exactamente qué está impidiendo exactamente la implementación de ROOT.war, ya que requiere el acceso a los archivos de registro de Tomcat y los archivos conf para verificar los casos que describí anteriormente.

También, por lo que veo, mi administrador parece incapaz de mantener un servidor Tomcat y encontrar el problema. Así que decidí ir con un servidor Tomcat dedicado después de luchar con el servidor compartido.

+0

¿Tomcat se usa de forma independiente y sirve HTTP o hay otro servidor manejando eso y comunicándose a Tomcat a través de AJP? Parece que hay algún hosting virtual en marcha. ¿Eso está definido en el 'server.xml' principal de Tomcat o hecho como un archivo de configuración específico del host separado bajo' conf/Catalina'? – laz

+0

Acabo de intentar agregar la ruta de contexto al archivo server.xml de mi tomcat y me redirigió como un campeón. Todo lo que hice fue poner docBase = "mi-aplicación" y no una ruta absoluta ni nada de eso. En su código de ejemplo anterior, ¿eso es lo que significa "carpeta de ruta de mi aplicación desplegada"? –

+0

Además, ¿tiene acceso al elemento completo que contiene el elemento ? Dependiendo de su configuración, puede evitar que la configuración de contexto funcione como era de esperar. –

Respuesta

4

lo general, esto se puede lograr mediante los siguientes pasos:

  • definir un archivo de contexto ROOT.xml en conf/Catalina/localhost
  • Nombre de su aplicación web GUERRA “ROOT.war” o que contiene la carpeta “ROOT "

Sin embargo, dudo que pueda hacer eso en una instancia compartida de Tomcat. Solo una aplicación puede ejecutarse como la aplicación predeterminada. La empresa de hosting probablemente no lo permita, ya que de lo contrario, ¿qué aplicación permitirán que sea la predeterminada para muchas personas que comparten la misma instancia de Tomcat?

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

+0

Gracias por la referencia. Pero no tengo control sobre la mayoría de las partes que sugiere el artículo. Y creo que el administrador ya ha establecido la parte contextual como ya he mencionado. – doctrey

+0

Si el administrador ha establecido su ruta de contexto ... existe su respuesta, no puede hacer esto sin que el usuario entre en una "carpeta" como http // myapp.com/myapp. La única forma de que puedas superar esto es hacer que el administrador te despliegue como ROOT.war u obtener tu guerra apuntada desde ROOT.xml. –

+0

@Bob Según [aquí] (http://wiki.apache.org/tomcat/HowTo#How_do_I_make_my_web_application_be_the_Tomcat_default_application.3F) se supone que el método que describí anteriormente establece la aplicación como predeterminada. Aunque no tengo claro si se anulará la aplicación ROOT y se convertirá en la nueva ROOT o simplemente actuará como predeterminada para las aplicaciones que no están asignadas a ROOT y cualquier otro contexto ya definido, lo cual no tiene sentido, creo . – doctrey

3

El Tomcat Wiki tiene un section en poner aplicaciones en contexto por defecto. Sin embargo, para hacer esto, implica cierto control sobre el servidor Tomcat que puede no ser posible en el contexto compartido que describe.

Si tiene la capacidad de instalar otros sistemas en el servidor, una solución alternativa sería usar un servidor proxy como NGINX. Esto es mucho más complicado que simplemente nombrar tu archivo de guerra ROOT.war, pero a veces es la única opción.

Si usted tiene Nginx escuchando en el servidor y usted tiene su propia dirección URL, utilice el HttpProxyModule con la configuración, tales como:

server { 
     listen   80; 
     server_name  my.domain.com; 
     location/{ 
      proxy_pass    http://my-host/my-application; 
      proxy_set_header  X-Real-IP $remote_addr; 
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header  Host $http_host; 
     } 
    } 

también con el fin de hacer este trabajo, que tendría que poseer el "my.domain.com" url y debería estar separado del que todos están usando para el servidor Tomcat compartido.

La parte nginx de la solución es gratuita, pero si necesita registrar una url nueva y luego usar algo como no-ip.com para redirigirla al servidor tomcat, costaría dinero.

+0

Creo que prefiero seguir configurando Tomcat para obtener los resultados. Gracias de cualquier manera. – doctrey

+0

Sí, pensé. Esta solución es más para un escenario donde tienes muchos sitios y muchas URL para redirigir. Pero pensé que podría ser útil para alguien. –

+0

Me funcionó. Gracias por el consejo. Realmente me molestó el "contexto" de cada aplicación al final de la URL. – alfredocambera

5

En su pregunta, que afirman que el administrador establece el contexto como:

<Context path="" docBase="path of my-application deployed folder"/> 

Sobre la base de las observaciones anteriores, sugeriría tratando de utilizar el relativa ruta de la aplicación en lugar de la absoluta ruta.

yo probamos este en mi servidor Tomcat con:

<Context path="/" docBase="my-application/" /> 

y que hizo el truco.

El elemento Host que contiene el elemento Contexto realmente establece algunos parámetros que también pueden afectar el contexto. Si se trata de la configuración predeterminada, entonces un contexto relativo simplemente debe apuntar a la carpeta webapps. Si ha sido cambiado, los resultados pueden variar.

+0

Intenté con la ruta relativa en caso de que las rutas absolutas de _appBase_ y _docBase_ tuvieran algunos conflictos, pero ese no era el problema. – doctrey

+0

Me has ahorrado mucho tiempo. Muchas gracias. – dementiev

+0

Intenté dar una ruta relativa en lugar de dar una ruta absoluta, pero el servidor tomcat no se estaba ejecutando .. –

Cuestiones relacionadas