Java HttpServletRequest Pobierz adres URL w pasku URL przeglądarki

Próbuję pobrać bieżący adres URL strony za pomocą obiektu Java request. Użyłem prośby.getRequestURI () do preformowania tego, ale zauważyłem, że gdy Klasa java przekierowuje mnie do innej strony z żądania servleta getRequestURI daje, że ten adres w przeciwieństwie do oryginalnego adresu URL, który został wpisany w przeglądarce i który nadal pokazuje w przeglądarce.

Ex: \ AdvancedSearch:
getRequestURI() zwraca " \ subdir \ search \ search.jsp "

I ' m looking for a way aby pobrać to, co przeglądarka widzi jako adres URL, a nie to, co wie ta strona, jest tylko opakowaniem serwletów.

Author: Ballsacian1, 2009-08-10

7 answers

Jeśli Twoje bieżące żądanie pochodzi z" wewnątrz serwera aplikacji " lub dołącz, oczekuje się, że serwer aplikacji zachowa informacje o żądaniu jako atrybuty żądania. Konkretne atrybuty i ich zawartość zależą od tego, czy wykonujesz operację "forward", czy "include".

Dla <jsp:include> oryginalny macierzysty adres URL zostanie zwrócony przez request.getRequestURL(), A Informacje o dołączonej stronie znajdą się w następujących atrybutach żądania:

     javax.servlet.include.request_uri
     javax.servlet.include.context_path
     javax.servlet.include.servlet_path
     javax.servlet.include.path_info
     javax.servlet.include.query_string

Dla <jsp:forward>, Nowy URL będzie zwracane przez request.getRequestURL(), A Informacje o pierwotnym zapytaniu znajdą się w następujących atrybutach zapytania:

     javax.servlet.forward.request_uri
     javax.servlet.forward.context_path
     javax.servlet.forward.servlet_path
     javax.servlet.forward.path_info
     javax.servlet.forward.query_string
Są one określone w sekcji 8.3 i 8.4 specyfikacji Servlet 2.4.

Należy jednak pamiętać, że informacje te są przechowywane tylko dla wysyłanych wewnętrznie żądań. Jeśli masz front-endowy serwer WWW lub wysyłkę poza bieżącym kontenerem, wartości te będą równe null. Innymi słowy, możesz nie mieć możliwości znalezienia oryginalnego adresu URL żądania.

 42
Author: kdgregory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-10 21:28:54

Po prostu zrobiłem małe uporządkowanie rozwiązania przez Ballsacian1

String currentURL = null;
if( request.getAttribute("javax.servlet.forward.request_uri") != null ){
    currentURL = (String)request.getAttribute("javax.servlet.forward.request_uri");
}
if( currentURL != null && request.getAttribute("javax.servlet.include.query_string") != null ){
    currentURL += "?" + request.getQueryString();
}

Sprawdzanie null będzie działać znacznie wydajniej niż porównywanie łańcuchów.

 9
Author: readikus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-06 16:24:39
String activePage = "";
    // using getAttribute allows us to get the orginal url out of the page when a forward has taken place.
    String queryString = "?"+request.getAttribute("javax.servlet.forward.query_string");
    String requestURI = ""+request.getAttribute("javax.servlet.forward.request_uri");
    if(requestURI == "null") {
        // using getAttribute allows us to get the orginal url out of the page when a include has taken place.
        queryString = "?"+request.getAttribute("javax.servlet.include.query_string");
        requestURI = ""+request.getAttribute("javax.servlet.include.request_uri");
    }
    if(requestURI == "null") {
        queryString = "?"+request.getQueryString();
        requestURI = request.getRequestURI();
    }
    if(queryString.equals("?null")) queryString = "";
    activePage = requestURI+queryString;
 5
Author: Ballsacian1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-12 14:07:36

${requestScope ['javax.servlet.naprzód.query_string"]} -- jeśli uzyskasz do niego dostęp z JSP, używając języka wyrażeń

 4
Author: MihaiS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-22 09:28:26

Możesz spróbować tego

<%=request.getRequestURL().toString()%>
 1
Author: iCrazybest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-21 08:13:28

Aby uzyskać żądaną ścieżkę HTTP bez znajomości stanu wewnętrznego przepływu żądania, użyj tej metody:

public String getUri(HttpServletRequest request) {
    String r = (String) request.getAttribute("javax.servlet.forward.request_uri");
    return r == null ? request.getRequestURI() : r;
}
 1
Author: Daniel De León,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 22:41:05

Ta sama odpowiedź co @kdgregory, ale możesz raczej użyć stałych dyspozytora żądania.

javax.servlet.include.request_uri        RequestDispatcher.FORWARD_REQUEST_URI
javax.servlet.include.context_path       RequestDispatcher.FORWARD_CONTEXT_PATH
javax.servlet.include.servlet_path       RequestDispatcher.FORWARD_SERVLET_PATH
javax.servlet.include.path_info          RequestDispatcher.FORWARD_PATH_INFO
javax.servlet.include.query_string       RequestDispatcher.FORWARD_QUERY_STRING
 0
Author: fingerprints,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 17:06:27