2011-07-05 2 views
2

J'ai une application tomcat 7 dont je peux obtenir des demandes de sources externes.rediriger les demandes basées sur le corps tomcat

La plupart d'entre eux appellent ma demande comme ceci:

http://localhost:8080/MyWeb/exRequest

et je construis servlet avec motif URL dans l'application de MyWeb.

Cependant, une source externe doit envoyer la demande comme ceci:

http://localhost:8080/

et dans le corps:

<xml name="test" /> 

Depuis que je ne veux pas déclarer une servlel générale (comme tomcat default) car cela signifie que toute requête devra passer par mon servlet, j'ai pensé à changer index.jsp de ROOT pour rediriger vers ma servlet.

Est-ce la meilleure option?

Y a-t-il une option pour créer une servlet par défaut qui ne sera invoquée que s'il y a un paramètre spécial dans le corps?

ÉDITÉE

S'il vous plaît noter que je reçois les demandes localhost: 8080 et non localhost: 8080/MyWeb - il est général de tomcat et non à une application Web spécifique

Répondre

1

Vous ne pouvez pas choisir une servlet à invoquer en fonction du corps de la requête, mais vous pouvez définir une servlet en tant que "fichier de bienvenue" dans votre fichier web.xml.

<servlet> 
    <servlet-name>index</servlet-name> 
    <servlet-class>com.y.MyWelcomeServlet</servlet-class> 
</servlet> 

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

<welcome-file-list> 
    <welcome-file>index</welcome-file> 
</welcome-file-list> 

Si vous souhaitez conserver la fonction « bienvenue » de certains index.jsp existants, votre servlet pourrait transmettre les requêtes sans XML correct dans le corps à un fichier index.jsp situé dans le répertoire WEB-INF.

+0

Le problème est que j'obtiens une notification au tomcat: localhost: 8080 et non à localhost: 8080/MyWeb où je pourrais localiser ces définitions dans web.xml de MyWeb – Dejell

+1

@Odelya - Okay , Je vois maintenant.Si le client qui fait cette demande est si inflexible qu'il ne peut pas passer à l'URL appropriée, il est peu probable de suivre une réponse de redirection.On dirait que votre meilleur pari est de déplacer l'application web entière vers 'ROOT', puis de reconfigurer vos servlets existants pour inclure l'ancien nom de contexte d'application dans leur chemin. Par exemple, si le servlet était 'exRequest', et le contexte' MyWeb', il se déplacerait vers le contexte 'ROOT' et serait mappé en tant que' MyWeb/exRequest'. – erickson

+0

C'est exactement ce que je pensais faire. pour déplacer l'application vers root – Dejell

1

Non, mais vous pouvez créez un Filter et transférez/redirigez vers une servlet spécifique lorsque la demande remplit certaines conditions.

Si vous utilisez la servlet 3.0, mappez-la avec @WebFilter, sinon utilisez web.xml et <filter> + <filter-mapping>. Vous devez l'exécuter avant le servlet par défaut.

+0

Non - Pour est-ce l'option ou il est préférable de créer un filtre pour TOUTES les demandes? Depuis que j'utilise le changement d'index.jsp de la racine c'est seulement pour localhost: 8080/request, sinon ce sera pour toutes les requêtes – Dejell

+0

Passer par un filtre est insignifiant en termes de performances. Et vous pouvez mapper le filtre à juste/ – Bozho

+0

J'apprécie votre aide mais ce n'est pas ce que je voulais dire. Voir la question éditée pour expliquer plus – Dejell

Questions connexes