2009-04-29 12 views
5

Básicamente, quiero un servlet para manejar todas las solicitudes entrantes, independientemente de la ruta. Estoy en un entorno de alojamiento compartido con acceso para configurar mi propio archivo web.xml.Configurar web.xml (Tomcat 5) para un servlet para manejar todas las solicitudes entrantes?

Tengo el siguiente configurado en web.xml, pero no funciona en Tomcat 5:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
     "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>Redirect</display-name> 
    <servlet> 
     <display-name>Redirect</display-name> 
     <servlet-name>Redirect</servlet-name> 
     <servlet-class>com.Redirect</servlet-class> 
     <init-param> 
      <param-name>host</param-name> 
      <param-value>www.myredirectdomain.com</param-value> 
     </init-param> 
     <init-param> 
      <param-name>redirect-type</param-name> 
      <param-value>301</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Redirect</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

Lo anterior trabajó para cualquier cosa que empiece con un directorio de la ruta, tales como:

www.mydomain.com/anypath1/anypath2... 
www.mydomain.com/anypath1 

sin embargo, no funcionó para:

www.mydomain.com/ or 
www.mydomain.com 

también probé la siguiente correlación de servlet:

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Con el mismo resultado. Ninguno de los dos funcionó ... ¿Alguien tiene alguna sugerencia?

Respuesta

-1

¿Usted intentó

<url-pattern>*</url-pattern> 

?

+1

No, intentaré eso, pero no estoy seguro de si es una sintaxis legal. –

0

Patrón/* invocará definitivamente su servlet Redirect. ¿Depuró su servlet para ver si recibió la solicitud de esa url? ¿Qué quieres decir con que no funcionó? ¿Recibió algún error o qué pasó?

+0

El servlet Redirect solo recibió una solicitud que incluía al menos un directorio. Si fui directamente al dominio, es decir, a www.midominio.com o a www.midominio.com/, no se invocó el servlet de redireccionamiento. El servlet Redirect funciona según lo previsto. El error que recibo es 403 Prohibido. Sin embargo, si pongo un archivo index.jsp en la raíz no obtengo ningún error. –

+0

Utilice , si no desea usar una página de índice. –

+0

Veo que editó su pregunta ahora. ¿No tiene ningún nombre de contexto para su aplicación web donde configuró web.xml o el web.xml es el contexto raíz de tomcat? Dudo que funcione. Puede definir index.jsp en welcome-file-list y en jsp redirigir la solicitud a su servlet. –

1

<url-pattern>/*</url-pattern> debería funcionar. Su aplicación web debe implementarse en el contexto raíz. Por defecto, tomcat usa la aplicación web llamada ROOT; sin embargo, puede cambiarlo para buscar otra aplicación web en su servidor.xml.

Otro enfoque sería crear un ServletFilter para hacer el trabajo y asignarlo de la misma manera. Existen ventajas y desventajas para cada enfoque (servlet y filtro de servlet). Sin embargo, a partir de su ejemplo, parece que solo desea enviar todo a otro sitio, por lo que debería funcionar.

4

Tomcat 5 implementa la especificación Servlet 2.4. Se puede descargar aquí: JCP Servlet 2.4 Spec

En la pág. 86 - SRV.11.2 describe cómo especificar asignaciones de servlets. Si entiendo lo que intenta hacer correctamente, está intentando interceptar todas las solicitudes (sin importar la ruta) a su servidor con un único Servlet. Para que esto funcione, su aplicación web necesita estar montada en el contexto predeterminado ("ROOT") en el caso de Tomcat y su Servlet debe asignarse al servlet predeterminado en su web.xml. Su mapeo en su web.xml es correcto.

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Creo que el problema que está teniendo es con el contexto ROOT. ¿Qué muestra el acceso a www.mydomain.com/ y www.midominio.com? No menciona si su entorno de alojamiento compartido le brinda acceso completo a su propia configuración de Tomcat, pero si puede acceder y modificar su directorio $ TOMCAT5_HOME/conf, hay algunas maneras de hacer que esto funcione para usted.

Probablemente la manera más limpia es añadir lo siguiente:

< Context path="" debug="0" docBase="your-app"> 

a $ TOMCAT5_HOME/conf/server.xml. Esto supone que sus aplicaciones se llaman "su-aplicación.war".

Espero que esto ayude.

+2

¿Importa si Ruta de contexto = "" o ruta = "/"? Lo he visto definido como "/" en el pasado. –

Cuestiones relacionadas