Как получить реальный URL-адрес запроса в Struts с плитками?

Когда вы используете плитки со 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?


person Community    schedule 25.09.2008    source источник


Ответы (5)


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

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

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

<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>
person digz6666    schedule 21.07.2010

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

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

person adlerer    schedule 14.09.2010

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

  • получить исходный URL-адрес запроса в действии и установить его в запросе и вызвать его из JSP
  • используйте фильтр сервлетов, чтобы сделать то же самое
person Mwanji Ezana    schedule 25.09.2008

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

private String getOriginalUri(HttpServletRequest request) {
    String targetUrl = request.getServletPath();
    if (request.getQueryString() != null) {
        targetUrl += "?" + request.getQueryString();
    }
    return targetUrl;
}
person Steve McLeod    schedule 01.10.2008
comment
Нет, в случае, указанном ОП, это точно не так. - person zb226; 03.06.2016

Вам просто нужно сделать это в своем действии:

    request.getAttribute("javax.servlet.forward.request_uri")
person Carlos Fernando    schedule 14.07.2020