Как получить реальный URL-адрес запроса в Struts с Tiles?
Когда вы используете Tiles with Struts и делаете...
request.getRequestURL()
... вы получаете URL-адрес, например. /WEB-INF/jsp/layout/newLayout.jsp
вместо реального URL, который был введен пользователем, что-то вроде /context/action.do
.
В более новых версиях Struts, 1.3.x и after, вы можете использовать решение упомянутое на javaranch, и получить реальный URL-адрес, используя запрос атрибут ORIGINAL_URI_KEY
.
Но как это сделать в Struts 1.2.x?
Ответы
Ответ 1
Я использую это, что также работает на Spring:
<% out.println(request.getAttribute("javax.servlet.forward.request_uri")); %>
Если вам также нужна строка запроса (внесенная matchew):
<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>
Ответ 2
Когда вы запрашиваете request.getRequestURL() со своего уровня view/jsp/tiles, это уже другой перезаписанный запрос.
Как упоминает Мваниджи Эзана, наиболее подходящим способом является сохранение его для разделения свойства на этапе выполнения действия. Вы можете автоматизировать этот процесс с помощью перехватчиков в Struts2.
Ответ 3
Я не знаю, имеет ли Struts 1.2.x аналогичную константу Globals, но вы можете создать свой собственный, по крайней мере, двумя способами:
- получить исходный URL-адрес запроса в действии и установить его в запросе и вызвать его из JSP
- используйте сервлет-фильтр, чтобы сделать то же самое.
Ответ 4
Это работает в Struts 1.2
private String getOriginalUri(HttpServletRequest request) {
String targetUrl = request.getServletPath();
if (request.getQueryString() != null) {
targetUrl += "?" + request.getQueryString();
}
return targetUrl;
}