2009-04-29 7 views
5

Fondamentalmente voglio che un servlet gestisca tutte le richieste in arrivo indipendentemente dal percorso. Sono in un ambiente di hosting condiviso con accesso per configurare il mio file web.xml.Configura web.xml (Tomcat 5) per un servlet per gestire tutte le richieste in arrivo?

Ho il seguente configurato in web.xml, ma non funziona su 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> 

È possibile che questo ha lavorato per tutto ciò che inizia con una directory nel percorso come ad esempio:

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

Tuttavia, non ha funzionato per:

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

ho anche provato il seguente mapping servlet:

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

Con lo stesso risultato. Nessuno dei due ha funzionato ... Qualcuno ha qualche suggerimento?

risposta

-1

Hai provato

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

?

+1

No, lo proverò, ma non sono sicuro che sia una sintassi legale. –

0

Pattern/* invoca in modo definitivo il servlet di Redirect. Hai eseguito il debug del tuo servlet per vedere se ha ricevuto la richiesta per quell'URL? Cosa vuoi dire essere non ha funzionato? Hai ricevuto qualche errore o cosa è successo?

+0

Il servlet di reindirizzamento ha ricevuto solo una richiesta che includeva almeno una directory. Se sono andato direttamente al dominio, www.mydomain.com o www.mydomain.com/, il servlet di reindirizzamento non è stato richiamato. Il servlet di reindirizzamento funziona come previsto. L'errore che ottengo è 403 Proibito. Tuttavia, se metto un file index.jsp nella radice non ottengo alcun errore. –

+0

Utilizzare , se non si desidera utilizzare una pagina indice. –

+0

Vedo che hai modificato la tua domanda ora. Non hai alcun nome di contesto per la tua applicazione web in cui hai configurato web.xml o web.xml è il contesto di root di tomcat? Dubito che funzionerà. È possibile definire index.jsp nella lista di benvenuto-file e nella jsp reindirizzare la richiesta al proprio servlet. –

1

<url-pattern>/*</url-pattern> dovrebbe funzionare. La tua webapp deve essere implementata nel contesto di root. Per impostazione predefinita, tomcat utilizza la webapp denominata ROOT; tuttavia, puoi cambiarlo per cercare un'altra webapp nel tuo server.xml.

Un altro approccio potrebbe essere creare un ServletFilter per eseguire il lavoro e mapparlo allo stesso modo. Ci sono pro e contro per ogni approccio (filtro servlet e servlet). Tuttavia, dal tuo esempio, sembra che tu voglia semplicemente inviare tutto ad un altro sito, quindi dovrebbe funzionare.

4

Tomcat 5 implementa la specifica Servlet 2.4. Può essere scaricato qui: JCP Servlet 2.4 Spec

a pag. 86 - SRV.11.2 descrive come specificare i mapping servlet. Se capisco cosa stai cercando di fare correttamente, stai cercando di intercettare ogni richiesta (non importa quale sia il percorso) al tuo server con un singolo servlet. Affinché funzioni, la tua webapp deve essere montata al contesto predefinito ("ROOT") nel caso di Tomcat e il tuo servlet deve essere mappato sul servlet predefinito nel tuo web.xml. La tua mappatura nel tuo web.xml è corretta.

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

Penso che il problema riscontrato sia il contesto ROOT. Cosa mostra l'accesso a www.mydomain.com/ e www.mydomain.com? Non menzionerai se il tuo ambiente di hosting condiviso ti dà pieno accesso alla tua configurazione di Tomcat, ma se puoi accedere e modificare la tua directory $ TOMCAT5_HOME/conf, ci sono alcuni modi per farlo funzionare per te.

Probabilmente il modo più pulito è quello di aggiungere il seguente:

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

a $ TOMCAT5_HOME/conf/server.xml. Questo presuppone che le tue applicazioni vengano chiamate "your-app.war".

Spero che questo aiuti.

+2

È importante se Context path = "" o path = "/"? L'ho visto definito come "/" nel passato. –

Problemi correlati