Как получить исходный url-адрес запроса от сервлета / jsp после нескольких сервлетов вперед
Я работаю над приложением бронирования круиза, используя стойки / плитки, которые используют несколько внутренний сервлет / jsp вперед, чтобы достичь правой jsp для отображения. Но, как только вы достигнете окончательного jsp, который используется для рендеринга страницы,${pageContext.request.requestURL}
вызовите, что jsp возвращает путь этой jsp.
- исходный запрос: /бронирование/getCruiseDetails
- передается в: / бронирование / validateCruiseDeteails.jsp
- перенаправляется на: / booking / validateUser.jsp
- наконец-то перенаправляется на:/бронирование/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>