如何从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”)

08-17 18:52