Как получить доступ к REQUEST_URI из действия Struts 2? В perl/php/ruby он легко доступен через ENV["REQUEST_URI"] и тому подобное. В java кажется, что PageContext.getErrorData().getRequestURI() — это то, что я ищу, но, к сожалению, PageContext, похоже, не определен в действии, либо потому, что перенаправление ErrorDocument делает запрос не похожим на ошибка, или потому что она определена позже.
Конкретный пример
Учитывая приложение struts 2 с интерфейсом apache (mod_jk/ajp) на 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.