【问题标题】:Display different Tomcat error pages depending on URL of original request根据原始请求的 URL 显示不同的 Tomcat 错误页面
【发布时间】:2010-11-04 08:01:52
【问题描述】:

我想使用 Tomcat 的 error-page 指令来显示各种不同的错误页面以响应各种类型的异常。但是,我希望显示的错误页面具有不同的样式和内容,具体取决于导致错误的原始请求 URL。

具体来说,我的 Web 应用程序有一个管理部分和一个用户部分。错误页面在样式和菜单方面都应该不同。区分给定页面所在部分的最可靠方法是在 URL 中查找字符串。我想将 Tomcat 错误页面指向一个 servlet,它会解析 URL 并重定向到适当样式的错误页面。

所以 1) 是否可以使用错误页面或其他机制将错误重定向到 servlet 而不是 JSP? (如果没有,我可以在 JSP 中做我想象的事情吗?)

和 2) 一旦我在我的 servlet 中,我能否确定导致错误的请求 URL(request.requestURI 似乎不起作用——它指向错误 JSP 本身的位置)。

【问题讨论】:

    标签: java jsp tomcat custom-error-pages


    【解决方案1】:

    Tomcat 的错误页面是显示应用程序错误的最后手段(以防您的错误页面实际上失败)。通常您应该(我建议)构建自己的错误页面,您可以在非技术视图中显示错误(默认情况下)和技术视图(如果用户愿意)以适合您的用户的方式。

    【讨论】:

    • 公平点,事实上我们已经做到了;此应用程序基于 Spring MVC,并使用 Spring 的异常解析来解决未在本地捕获和处理的错误。但是,在应用程序和框架范围之外发生的某些错误仍然会影响 Tomcat;似乎经常出现的特定类型是 JSP 中的某种语法错误。
    • 是的,在这种情况下,您应该转发 jimr 的答案。我们没有使用 JSP,所以如果发生任何错误,我们都可以捕获并显示它。
    【解决方案2】:

    你可以从

    获取原始requestURI
    pageContext.errorData.requestURI
    

    在您通过<error-page> 在您的web.xml 中注册的错误jsp 中

    更多信息请参见http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/jsp/ErrorData.html

    至于使用 servlet,您可能可以在错误 jsp 中使用 <jsp:forward> 来转发到您选择的 servlet。

    【讨论】:

    • 现在我们正在取得进展。我将推迟将此标记为已回答,直到 1) 我已经尝试过,以及 2) 我给了更多时间来回复,但这绝对是我正在寻找的信息类型。谢谢。
    • 工作就像一个魅力(我正在做一个 c:if 检查 requestURI 是否包含某些字符串,如果包含,则执行转发。
    • 我不得不使用 pageContext.getErrorData().getRequestURI() 而不是 pageContext.errorData.requestURI
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    相关资源
    最近更新 更多