Problema de barra diagonal de Tomcat 7 con webapps

13

Recientemente actualicé mi servidor Tomcat de la versión 6.x a la versión 7.x más reciente.

Se me ocurrieron algunos problemas, esperando obtener ayuda.

Tengo una aplicación llamada MyApp

En tomcat6, cuando fui a http://www.example.com/MyApp/page/ normalmente obtendría el resultado deseado.

Ahora, en tomcat7, al visitar la misma url exacta (con la barra inclinada final) obtengo el error: "El recurso no está disponible", ya que el tomcat piensa que / MyApp / page / es un nombre completo de aplicación web en lugar de ser nombres de solicitud página debajo de la aplicación web MyApp.

Necesito la barra al final de mi url porque de lo contrario obtengo el error: "Estado HTTP 405 - No se admite el método de solicitud 'GET'", lo cual está bien porque realmente no permití el método GET para la solicitud de "página" .

Si alguien sabe cómo decirle a Tomcat que la barra inclinada después de la ruta de la aplicación web existente no debería suponer que se redirija a nuevas llamadas de aplicación web a toda la "cadena" y simplemente procese la solicitud como en tomcat6, ¡sería genial!


fuente
¿Hay un servlet predeterminado en el web.xmlque está asignado /*? De lo contrario, tomcat utiliza una lista de archivos de bienvenida. Normalmente, solo el primer segmento de ruta se interpreta como una raíz de contexto. Por lo tanto, no encontrar su aplicación web no parece ser el problema.
mana
el primer segmento de ruta es una raíz de contexto y realmente funciona, lo encuentra, pero las siguientes rutas en lugar de ser parte de la primera ruta, el tomcat busca webapp con toda la ruta ... No tengo nada que configure eso no es el predeterminado ..
Realmente no entiendo lo que estás diciendo. Lo siento. Si tiene una aplicación web configurada con el nombre MyApp, tomcat utilizará este contexto de aplicación web utilizando la ruta restante page/. Si no, buscará el ROOTcontexto, utilizando la ruta completa para una búsqueda.
mana
Tengo una aplicación web llamada MyApp y example.com/MyApp está funcionando, pero al visitar example.com/MyApp/foo en lugar de buscar contenido foo dentro de MyApp, busca una aplicación web que llama "MyApp / foo /" y no busca el contenido de MyApp llama foo ..

Respuestas:

1

Antigua pregunta, pero dado que recientemente he luchado con la barra diagonal en Tomcat 8, sé que los problemas con la barra continúa afectando al mundo de usuarios de Tomcat. :-)

Es posible que se encuentre con cambios en la forma en que Tomcat maneja las redirecciones al cargar el contexto raíz. Eche un vistazo al error 58660 y lea algunas de las discusiones del desarrollador allí. Es posible que deba desactivar el mapeador predeterminado modificando el mapperContextRootRedirectEnabledatributo del Contextelemento en conf/context.xml.

Peter
fuente
0

Revise su lista de archivos de bienvenida ... lo que sigue es especulación ...

Creo que la esencia del problema es cuando a Tomcat se le presenta un / - Tiene algunas opciones: iterar sobre la lista de archivos de bienvenida.

Aquí es donde comienza la diversión ... Mucha gente quiere usar * .do para cosas como struts. Entonces quieren que index.do sea la página de inicio. O también es común index.jsp donde * .jsp se asigna al JspServlet.

Aquí es donde las cosas se ponen divertidas. Entonces, digamos que sus archivos de bienvenida son index.jsp, index.do.

Lo que está haciendo Tomcat (IIRC) es primero iterar sobre la lista de archivos de bienvenida buscando recursos con ese nombre.

Luego hará un segundo pase buscando mapeos que coincidan. Entonces, si index.jsp se especifica en la lista de bienvenida y se asigna * .jsp. Luego, tomcat intentará reenviar a index.jsp y obtendrá un 404.

Así que supongo que tiene una asignación de servlet y una superposición de archivos de bienvenida. Y el comportamiento de ese servlet no es compatible con GET. (De ahí el 405)

Tim Funk
fuente
0

Si su proyecto está utilizando un módulo web dinámico de v2.2, debe crear explícitamente al menos un archivo (puede ser un archivo html vacío) presente en web.xml (por ejemplo: index.html) en su contenido web.

Snehal
fuente
1
esto es un comentario; no es una respuesta; considere comentar en el futuro cuando obtenga más puntos. gracias
Hrvoje Špoljar