Подтвердить что ты не робот

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

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

Например

  • Исходный запрос: /бронирование/getCruiseDetails
  • отправляется в:/booking/validateCruiseDeteails.jsp
  • отправляется в:/booking/validateUser.jsp
  • наконец, перенаправляется на: /booking/showCruiseDetails.jsp

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

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

4b9b3361

Ответ 1

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

В целевом JSP используется:

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

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

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

Ответ 2

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

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

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

Jsp:

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

Конечно, вам нужно отобразить страницу 404 в файле web.xml.

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

Ответ 6

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

request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI)