Как получить реальный URL-адрес запроса в Struts with Tiles? - PullRequest
13 голосов
/ 25 сентября 2008

Когда вы используете Tiles with Struts и делаете ...

request.getRequestURL()

... вы получите URL например, /WEB-INF/jsp/layout/newLayout.jsp вместо реального URL, который был введен / нажат пользователем, что-то вроде /context/action.do.

В более новых версиях Struts, 1.3.x и более поздних, вы можете использовать решение , упомянутое в javaranch , и получить реальный URL, используя атрибут запроса ORIGINAL_URI_KEY.

Но как это сделать в Struts 1.2.x?

Ответы [ 4 ]

14 голосов
/ 21 июля 2010

Я использую это, что также работает на Spring:

<% out.println(request.getAttribute("javax.servlet.forward.request_uri")); %>

Если вам также нужна строка запроса (предоставлено matchew ):

<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>
2 голосов
/ 14 сентября 2010

Когда вы запрашиваете request.getRequestURL () из слоя view / jsp / tile, это уже другой переписанный запрос.

Как отмечает Мванджи Эзана, наиболее подходящий способ - сохранить его для разделения свойства на этапе выполнения действия. Возможно, вы захотите автоматизировать этот процесс с помощью перехватчиков в Struts2.

1 голос
/ 01 октября 2008

Это работает в Struts 1.2

private String getOriginalUri(HttpServletRequest request) {
    String targetUrl = request.getServletPath();
    if (request.getQueryString() != null) {
        targetUrl += "?" + request.getQueryString();
    }
    return targetUrl;
}
1 голос
/ 26 сентября 2008

Я не знаю, имеет ли Struts 1.2.x похожую константу Globals, но вы можете создать свой собственный по крайней мере двумя способами:

  • получить исходный URL-адрес запроса в действии, задать его для запроса и вызвать его из JSP
  • используйте Servlet Filter, чтобы сделать то же самое
...