Как получить исходный URL-адрес запроса от сервлета / jsp после нескольких пересылок сервлета - PullRequest
29 голосов
/ 27 марта 2011

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

Например

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

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

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

Ответы [ 6 ]

57 голосов
/ 09 июля 2012

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

О целевом использовании JSP:

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

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

Не требуется никаких дополнительных действий с сервлетом переадресации

11 голосов
/ 27 марта 2011

Вы можете использовать фильтр для помещения адреса источника в атрибут запроса и затем прочитать его из jsp

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

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

Jsp:

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

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

3 голосов
/ 19 февраля 2016
${requestScope["javax.servlet.forward.request_uri"]}

или в одинарных кавычках

${requestScope['javax.servlet.forward.request_uri']}
1 голос
/ 27 марта 2011

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

0 голосов
/ 10 июля 2019

То же, что и @Lenny Markus, но с использованием предоставленной константы в классе Request Dispatcher.

request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI)
0 голосов
/ 04 января 2017

Вы можете показать его, не используя ссылку на компонент:

...