【问题标题】:web.xml 404 redirect to servlet, how to get the original URI?web.xml 404 重定向到 servlet,如何获取原始 URI?
【发布时间】:2011-11-19 22:08:48
【问题描述】:

我通过 web.xml 中的以下内容将 404 错误重定向到 servlet。

<error-page>
    <error-code>404</error-code>
    <location>/notFound.do</location>
</error-page>

我想记录请求试图去哪里,但我没有从引荐来源标头中获取它:request.getHeader("referer")

如果我只是点击任何旧的随机不存在的页面,则会显示“null”。

并且 request.getRequestURL()/request.getRequestURI() 都只显示最终登陆的 servlet 信息(即 /notFound)。

有什么方法可以获取所请求的“错误”页面 URL?

【问题讨论】:

    标签: servlets http-status-code-404 web.xml


    【解决方案1】:

    是的,它可用作名称为javax.servlet.forward.request_uri 的请求属性,由RequestDispatcher#FORWARD_REQUEST_URI 键入。错误页面位置即由简单的RequestDispatcher#forward() 调用调用。

    所以,你可以在servlet中得到如下:

    String originalUri = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
    

    或在 EL 中:

    <p>Original URI: ${requestScope['javax.servlet.forward.request_uri']}</p>
    

    【讨论】:

    • 我的 Tomcat 7.0.19 安装中的 servlet-api.jar(提供 javax.servlet.RequestDispatcher)似乎没有任何这些静态字段;只有 'forward' 和 'include' 方法。但是如果我直接把字符串放进去,我就可以让它工作。例如,以下作品。 request.getAttribute("javax.servlet.forward.request_uri") 感谢您的帮助!
    • 它肯定存在于其中(单击我的答案中的链接以查看 javadocs)。此问题表明您已将 IDE 配置为将您的项目视为 Servlet 2.4 或更旧的项目,或者您将编译时类路径依赖于放置在其他位置的松散和旧版本的 servlet-api.jar 文件。你在使用 Eclipse 吗?如果是这样,请阅读:stackoverflow.com/questions/4076601/…
    • 很奇怪。我打开了 servlet-api.jar 并查看了 RequestDispatcher.class 字节码,我在其中看到了 FORWARD_REQUEST_URI(以及其他常量)。但是在 Eclipse 中打开声明只显示了这两种方法。它们都指向磁盘上的同一个 jar...
    • 如前所述,当您的项目配置为 servlet 2.4 项目时,可能会发生这种情况。然后 Eclipse 将隐藏所有较新的类/方法。在项目的属性中,检查 Project facets 部分是否将 Dynamic Web Project facet 设置为 2.5 或最好是 3.0(Tomcat 7 是 Servlet 3.0 容器)。还要检查您的 web.xml 是否声明符合相同的 servlet 版本。
    • 啊...我的 web.xml 是 2.4。非常感谢! BalusC,我正在寻找一种与您联系的方式,以便从您的亚马逊愿望清单中获得一些东西。可以私信我吗? eric555 @ jabber dot org
    猜你喜欢
    • 2020-07-17
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多