Как получить исходный 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-адрес запроса после нескольких переходов.
Ответы
Ответ 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)