La méthode request.getRequestURI () renvoie l'URI avec le chemin du contexte.
Par exemple, si l'URL de base d'une application est http://localhost:8080/myapp/
(c'est-à-dire que le chemin du contexte est myapp ), et que j'appelle request.getRequestURI()
pour http://localhost:8080/myapp/secure/users
, elle reviendra /myapp/secure/users
.
Existe-t-il un moyen d'obtenir uniquement cette partie /secure/users
, c'est-à-dire l'URI sans chemin de contexte?
Réponses:
Si vous êtes à l'intérieur d'un servlet de contrôleur frontal qui est mappé sur un modèle de préfixe, vous pouvez simplement utiliser
HttpServletRequest#getPathInfo()
.En supposant que le servlet dans votre exemple est mappé
/secure
, alors cela retournera/users
ce qui serait les informations d'intérêt unique dans un servlet de contrôleur frontal typique.Si le servlet est cependant mappé sur un modèle de suffixe (vos exemples d'URL n'indiquent cependant pas que c'est le cas), ou lorsque vous êtes réellement à l'intérieur d'un filtre (lorsque le servlet à invoquer n'est pas encore nécessairement déterminé, donc
getPathInfo()
pourrait retournernull
), alors votre meilleur pari est de sous-transmettre vous-même l'URI de la requête en fonction de la longueur du chemin de contexte en utilisant laString
méthode habituelle :la source
getServletPath()
? J'écris un filtre et j'ai remarqué qu'ilgetPathInfo()
retournenull
, maisgetServletPath()
retourne le chemin moins le contexte (adapté pour passer au répartiteur de requêtes).getPathInfo()
renvoie null si le servlet du contrôleur frontal n'est pas mappé sur un modèle de préfixe./foo.xhtml
au lieu de/foo.jsf
) et non l'URI de la requête réelle (celui que l'utilisateur final verrait dans la barre d'adresse du navigateur). Dans ce cas, le chemin d'origine du servlet peut toutefois être résolu en tant qu'attribut de requête avec cléRequestDispatcher.FORWARD_SERVLET_PATH
. De toute façon, la question demande explicitement l'URI de la demande (comme dans la barre d'adresse du navigateur), donc la réponse est basée sur cela.la source
Avec Spring, vous pouvez faire:
la source
getPathInfo () renvoie parfois null. Dans la documentation HttpServletRequest
J'ai besoin d'obtenir le chemin du fichier sans chemin de contexte dans Filter et getPathInfo () me renvoie null. J'utilise donc une autre méthode: httpRequest.getServletPath ()
la source
Si vous utilisez request.getPathInfo () dans un filtre, vous semblez toujours obtenir null (au moins avec jetty).
Ce bug + réponse laconique non valide fait allusion au problème, je pense:
https://issues.apache.org/bugzilla/show_bug.cgi?id=28323
Je soupçonne que cela est lié au fait que les filtres s'exécutent avant que le servlet ne reçoive la demande. Il peut s'agir d'un bogue de conteneur ou d'un comportement attendu que je n'ai pas pu identifier.
Le contextPath est cependant disponible, donc la solution fforws fonctionne même dans les filtres. Je n'aime pas avoir à le faire à la main, mais l'implémentation est cassée ou
la source
Pour ce faire, vous pouvez supprimer le chemin du contexte du servelet de l'URI de la demande.
Lisez ici .
la source
Peut-être que vous pouvez simplement utiliser la méthode split pour éliminer le '/ myapp' par exemple:
la source