Как получить доступ к 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.