Как получить исходный REQUEST_URI из действия Struts 2, достигаемого с помощью перенаправления apache ErrorDocument? - PullRequest
1 голос
/ 30 июля 2009

Как получить доступ к REQUEST_URI из действия Struts 2? В perl / php / ruby ​​он легко доступен через ENV ["REQUEST_URI"] и тому подобное. В Java кажется, что PageContext.getErrorData (). GetRequestURI () - это то, что я ищу, но, к сожалению, PageContext, похоже, не определен внутри действия, либо потому, что перенаправление ErrorDocument делает запрос не похожим на ошибка, или потому что это определено позже.

Конкретный пример

Учитывая, что приложение apache-фронтэнда (mod_jk / ajp) Struts 2 на tomcat доступно через конфигурацию ErrorDocument 404 в apache. Со следующими данными:

- Исходный URL-адрес запроса (который вызывает 404) -

http://server/totally/bogus/path

- http.conf -

ErrorDocument 404 /struts2app/lookup.action

- действие распорок -

public String bogusUrlLookup() {
    HttpServletRequest request = ServletActionContext.getRequest();

    // contains /lookup.action as does request.getRequestURI();
    String url = RequestUtils.getServletPath(request);

    // PageContext is null, so I cannot reach ErrorData from it.
    log.info("pageContext="+ServletActionContext.getPageContext());

    // Not in the ENV
    // Map env = System.getenv();

    // Not in the ATTRIBUTES
    // request.getAttributeNames()

    // Not in HEADER
    // request.getHeaderNames()

    return ERROR;
}

Опять же, все, что мне нужно, это строка "/ totally / bogus / path", но в приведенном выше действии единственная строка URL-адреса, которую я могу найти, это "/struts2app/lookup.action". Я привязан к ErrorDocument, потому что полностью / поддельный / путь вряд ли будет находиться в пространстве имен моего приложения, потому что apache обслуживает другие ресурсы, отличные от tomcat.

Ответы [ 4 ]

1 голос
/ 08 сентября 2010

Использование:

JkEnvVar REDIRECT_URL ""

в вашем httpd.conf файле. Затем используйте request.getAttribute("REDIRECT_URL");, чтобы получить переменную в вашем jsp / servlets.

1 голос
/ 21 февраля 2012
baseUri = (String)request.getAttribute("struts.request_uri");
1 голос
/ 14 августа 2009

request.getAttribute ("javax.servlet.forward.request_uri")

0 голосов
/ 02 октября 2014

Если вы не хотите пропустить часть строки запроса, это лучше:

final String referrer = (String) request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
if(referrer != null) {
    final String query = (String) request.getAttribute(RequestDispatcher.FORWARD_QUERY_STRING);
    if(query != null && query.length() > 0) {
        url = referrer+ "?" + query;
    }
    else {
        url = referrer;
    }
// do something

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...