如何从Struts 2 Action中访问REQUEST_URI?在perl / php / ruby中,可以通过ENV [“ REQUEST_URI”]等获得。在Java中,似乎我正在寻找PageContext.getErrorData()。getRequestURI(),但是可悲的是,由于操作ErrorDocument重定向使请求看起来像不是错误,或者是因为它在以后定义。
一个特殊的例子
给定Tomcat前面的(mod_jk / ajp)struts 2应用程序是通过apache中的ErrorDocument 404配置访问的。详细信息如下:
-原始请求网址(触发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资源,完全/虚假/路径不太可能位于应用程序的名称空间中。
最佳答案
request.getAttribute(“ javax.servlet.forward.request_uri”)