Как получить исходный url-адрес запроса от сервлета / jsp после нескольких сервлетов вперед

Я работаю над приложением бронирования круиза, используя стойки / плитки, которые используют несколько внутренний сервлет / jsp вперед, чтобы достичь правой jsp для отображения. Но, как только вы достигнете окончательного jsp, который используется для рендеринга страницы,${pageContext.request.requestURL} вызовите, что jsp возвращает путь этой jsp.

  1. исходный запрос: /бронирование/getCruiseDetails
  2. передается в: / бронирование / validateCruiseDeteails.jsp
  3. перенаправляется на: / booking / validateUser.jsp
  4. наконец-то перенаправляется на:/бронирование/showCruiseDetails.jsp

Итак, в /бронирование / showCruiseDetails.jsp, когда я звоню ${pageContext.request.requestURL} I получить / бронирование / showCruiseDetails.jsp

Как вы получаете исходный (сделанный клиентом) url-адрес запроса от jsp, который был достигнут через несколько вперед. Я нашел следующие сообщения на StackOverflow, что намек на решение здесь и здесь, но они не обращаются к тому, как вы будете искать исходный url-адрес запроса после того, как произошло несколько переадресаций.

5 ответов


Я нашел лучший ответ в этом посте [ Как вы обнаруживаете URL-адрес в сервлете Java при пересылке в JSP? ]

на целевом JSP используйте:

request.getAttribute("javax.servlet.forward.request_uri")

чтобы узнать, какой был исходный URL.

это не требует от вас каких-либо дополнительных шагов на сервлете пересылки


вы можете использовать фильтр, чтобы поместить исходный адрес в атрибут запроса, а затем прочитать его из jsp

фильтр сопоставлен с / booking/ * execute:

request.setAttribute("origin", request.getRequestURL());

Jsp:

${pageContext.request.attribute["origin"]}

это работает, потому что фильтр по умолчанию установил диспетчер запросов. Это означает, что фильтр выполняется только для прямых запросов клиента, а не для пересылки/включая


${requestScope["javax.servlet.forward.request_uri"]}

или с одинарными кавычками

${requestScope['javax.servlet.forward.request_uri']}

рассмотрите возможность использования фильтров сервлетов для проверки информации. Это означает, что вы можете избежать переадресации проверки и просто оставаться в одном файле JSP.


вы можете показать его без использования ссылки на bean со следующим:

<h:outputText value="#{requestScope['javax.servlet.forward.request_uri']}" />

конечно, вам нужно отобразить страницу 404 в вашем интернете.хотя XML-файл.

<error-page>
    <error-code>404</error-code>
    <location>/xhtml/pg/error/404.xhtml</location>
</error-page>