Как получить реальный 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;
}