Java 如何从通过apache ErrorDocument重定向实现的Struts 2操作中获取原始请求URI?

Java 如何从通过apache ErrorDocument重定向实现的Struts 2操作中获取原始请求URI?,java,apache,struts2,servlets,Java,Apache,Struts2,Servlets,如何从Struts 2操作中访问请求URI?在perl/php/ruby中,它可以通过ENV[“REQUEST_URI”]等方式轻松获得。在java中,我正在寻找PageContext.getErrorData().getRequestURI(),但遗憾的是,PageContext似乎没有在操作中定义,这可能是因为ErrorDocument重定向使请求看起来不像一个错误,也可能是因为它是稍后定义的 特定示例 给定tomcat上的apache前端(mod_jk/ajp)struts 2应用程序,通

如何从Struts 2操作中访问请求URI?在perl/php/ruby中,它可以通过ENV[“REQUEST_URI”]等方式轻松获得。在java中,我正在寻找PageContext.getErrorData().getRequestURI(),但遗憾的是,PageContext似乎没有在操作中定义,这可能是因为ErrorDocument重定向使请求看起来不像一个错误,也可能是因为它是稍后定义的

特定示例

给定tomcat上的apache前端(mod_jk/ajp)struts 2应用程序,通过apache中的ErrorDocument 404配置实现。详情如下:

--原始请求url(触发404)--

--http.conf--

--撑杆动作--

同样,我需要的是字符串“/total/bogus/path”,但在上面的操作中,我能找到的唯一url字符串是“/struts2app/lookup.action”。我与ErrorDocument联系在一起是因为/bogus/path不可能在我的应用程序的名称空间中,因为apache提供其他非tomcat资源。

request.getAttribute(“javax.servlet.forward.request\u uri”)

使用:

JkEnvVar REDIRECT_URL ""

在您的
httpd.conf
文件中。然后使用
request.getAttribute(“重定向URL”)
获取jsp/servlet中的变量。

如果您不想错过查询字符串部分,最好:

baseUri = (String)request.getAttribute("struts.request_uri");
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

}

不。在这个上下文中是空的。
JkEnvVar REDIRECT_URL ""
baseUri = (String)request.getAttribute("struts.request_uri");
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

}