Ich habe ein HttpServletRequest
Objekt.
Wie erhalte ich die vollständige und genaue URL, die dazu geführt hat, dass dieser Anruf bei meinem Servlet eingegangen ist?
Oder zumindest so genau wie möglich, da es vielleicht Dinge gibt, die regeneriert werden können (vielleicht die Reihenfolge der Parameter).
Antworten:
Das
HttpServletRequest
hat die folgenden Methoden:getRequestURL()
- gibt den Teil der vollständigen URL vor dem Trennzeichen für die Abfragezeichenfolge zurück?
getQueryString()
- Gibt den Teil der vollständigen URL nach dem Trennzeichen für die Abfragezeichenfolge zurück?
Um die vollständige URL zu erhalten, gehen Sie einfach wie folgt vor:
quelle
Ich benutze diese Methode:
quelle
url
sie nur innerhalb der Methode deklariert, instanziiert und verwendet wird, sodass von anderen Threads als dem, auf den die Methode aufgerufen wurde, nicht zugegriffen werden kann.StringBuffer
für jeden Aufruf eine Instanz von erstellen und diese nicht für andere Threads freigeben. Dies sollte geändert werden, um a zu seinStringBuilder
.getRequestURI
?quelle
StringBuffer
.In einem Spring-Projekt können Sie verwenden
quelle
new ServletServerHttpRequest(request).getURI()
Wenn HttpUtil veraltet ist, ist dies die richtige Methode
quelle
Kombinieren Sie die Ergebnisse von
getRequestURL()
undgetQueryString()
sollten Sie das gewünschte Ergebnis erhalten.quelle
Sie können Filter verwenden.
Vergessen Sie nicht, die
<dispatcher>FORWARD</dispatcher>
Filterzuordnung in web.xml einzufügenquelle
Verwenden Sie die folgenden Methoden für das HttpServletRequest-Objekt
java.lang.String getRequestURI () - Gibt den Teil der URL dieser Anforderung vom Protokollnamen bis zur Abfragezeichenfolge in der ersten Zeile der HTTP-Anforderung zurück.
java.lang.StringBuffer getRequestURL () - Rekonstruiert die URL, über die der Client die Anforderung gestellt hat.
java.lang.String getQueryString () - Gibt die Abfragezeichenfolge zurück, die in der Anforderungs-URL nach dem Pfad enthalten ist.
quelle
Etwas spät zur Party, aber ich habe dies in meine MarkUtils- Webbibliothek in WebUtils aufgenommen - Checkstyle-genehmigt und JUnit-getestet:
Wahrscheinlich die schnellste und robusteste Antwort hier hinter Mat Baniks - aber selbst seine berücksichtigt mögliche nicht standardmäßige Portkonfigurationen mit HTTP / HTTPS nicht.
Siehe auch:
quelle
Sie können einen einfachen Einzeiler mit einem Ternär schreiben und wenn Sie das Builder-Muster des StringBuffers verwenden, aus
.getRequestURL()
:Aber das ist nur syntaktischer Zucker.
quelle