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


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

Например

  1. первоначальному запросу: /бронирование/getCruiseDetails
  2. перенаправляется на: / booking / validateCruiseDeteails.jsp
  3. пересылается в: /бронирование/методы validateuser.jsp
  4. наконец получает перенаправление на: /booking/showCruiseDetails.jsp

Итак, в /booking/showCruiseDetails.jsp когда я вызываю ${pageContext.request.requestURL} I get /booking/showCruiseDetails.jsp

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

5 27

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.

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

<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>