Mam HttpServletRequest
przedmiot
Jak uzyskać pełny i dokładny adres URL, który spowodował, że wywołanie dotarło do mojego serwletu?
Lub przynajmniej tak dokładnie, jak to możliwe, ponieważ być może są rzeczy, które można zregenerować (być może kolejność parametrów).
Odpowiedzi:
HttpServletRequest
Posiada następujące metody:getRequestURL()
- zwraca część pełnego adresu URL przed znakiem separatora ciągu zapytania?
getQueryString()
- zwraca część pełnego adresu URL po znaku separatora ciągu zapytania?
Aby uzyskać pełny adres URL, po prostu wykonaj:
źródło
Używam tej metody:
źródło
url
jest zadeklarowane, utworzone i utworzone tylko w metodzie, więc nie można uzyskać do niego dostępu z wątków innych niż ten, który wywołał metodę.StringBuffer
dla każdego połączenia i nie udostępniasz go innym wątkom. Należy to zmienić naStringBuilder
.getRequestURI
?źródło
StringBuffer
.W projekcie wiosennym możesz użyć
źródło
new ServletServerHttpRequest(request).getURI()
HttpUtil jest przestarzałe, jest to poprawna metoda
źródło
Łącząc wyniki
getRequestURL()
igetQueryString()
powinien uzyskać pożądany wynik.źródło
Możesz użyć filtra.
nie zapomnij umieścić
<dispatcher>FORWARD</dispatcher>
mapowania filtrów w pliku web.xmlźródło
Użyj następujących metod w obiekcie HttpServletRequest
java.lang.String getRequestURI () - Zwraca część adresu URL tego żądania od nazwy protokołu do ciągu zapytania w pierwszym wierszu żądania HTTP.
java.lang.StringBuffer getRequestURL () - Ponownie konstruuje adres URL, którego klient użył do wysłania żądania.
java.lang.String getQueryString () - Zwraca ciąg zapytania zawarty w adresie URL żądania po ścieżce.
źródło
Nieco późno na imprezę, ale włączyłem to do mojej biblioteki MarkUtils-Web w WebUtils - zatwierdzone przez Checkstyle i przetestowane przez JUnit:
Prawdopodobnie najszybsza i najbardziej niezawodna odpowiedź do tej pory za Matem Banikiem - ale nawet on nie uwzględnia potencjalnych niestandardowych konfiguracji portów z HTTP / HTTPS.
Zobacz też:
źródło
Możesz napisać prosty liner z trójskładnikiem i jeśli użyjesz wzorca konstruktora StringBuffer z
.getRequestURL()
:Ale to tylko cukier syntaktyczny.
źródło