J'ai un HttpServletRequest
objet.
Comment puis-je obtenir l'URL complète et exacte à l'origine de cet appel sur ma servlet?
Ou au moins aussi précisément que possible, car il y a peut-être des choses qui peuvent être régénérées (l'ordre des paramètres, peut-être).
Réponses:
A
HttpServletRequest
les méthodes suivantes:getRequestURL()
- renvoie la partie de l'URL complète avant le caractère séparateur de chaîne de requête?
getQueryString()
- renvoie la partie de l'URL complète après le caractère séparateur de chaîne de requête?
Donc, pour obtenir l'URL complète, faites simplement:
la source
J'utilise cette méthode:
la source
url
est déclarée, instanciée et utilisée uniquement à l'intérieur de la méthode, donc elle n'est pas accessible à partir de threads autres que celui qui a appelé la méthode.StringBuffer
pour chaque appel et ne la partagez pas avec d'autres threads. Cela devrait être changé pour être unStringBuilder
.getRequestURI
?la source
StringBuffer
.Dans un projet Spring, vous pouvez utiliser
la source
new ServletServerHttpRequest(request).getURI()
HttpUtil étant obsolète, c'est la bonne méthode
la source
La combinaison des résultats
getRequestURL()
etgetQueryString()
devrait vous obtenir le résultat souhaité.la source
Vous pouvez utiliser un filtre.
n'oubliez pas de mettre le
<dispatcher>FORWARD</dispatcher>
mappage de filtre dans web.xmlla source
Utilisez les méthodes suivantes sur l'objet HttpServletRequest
java.lang.String getRequestURI () -Retourne la partie de l'URL de cette demande du nom du protocole jusqu'à la chaîne de requête dans la première ligne de la demande HTTP.
java.lang.StringBuffer getRequestURL () -Reconstruit l'URL utilisée par le client pour effectuer la demande.
java.lang.String getQueryString () -Retourne la chaîne de requête contenue dans l'URL de demande après le chemin.
la source
Un peu tard pour la fête, mais je l'ai inclus dans ma bibliothèque MarkUtils-Web dans WebUtils - approuvé par Checkstyle et testé par JUnit:
Probablement la réponse la plus rapide et la plus robuste jusqu'ici derrière Mat Banik - mais même la sienne ne tient pas compte des configurations de port non standard potentielles avec HTTP / HTTPS.
Voir également:
la source
Vous pouvez écrire un simple liner avec un ternaire et si vous utilisez le modèle de générateur du StringBuffer à partir de
.getRequestURL()
:Mais ce n'est que du sucre syntaxique.
la source