【问题标题】:errorPage directive works, but error-page in web.xml doesn't?errorPage 指令有效,但 web.xml 中的错误页面无效?
【发布时间】:2025-12-31 09:55:07
【问题描述】:

当我把它放在我的 JSP 的顶部时,我得到了导致转发到我的错误页面的 jsp 异常...

<%@ page errorPage="/error.page" %>

但是当我尝试像这样使用 web.xml 全局执行此操作时:

<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error.page</location>
</error-page>

我只是得到一个空白页...我也尝试将 /error.jsp 放在位置元素中..但也不喜欢它..

我正在使用仅包含以下内容的 jsp 触发异常:

<%if(true)throw new RuntimeException("test exception");%>

我确实在 tomcat 的控制台中看到了异常,但是如果没有每个 jsp 上的指令,我就无法显示该错误页面...我在这里遗漏了一些简单的东西吗?

更新:

/error.page 被映射(使用spring)内容是这样的:

<%@ page isErrorPage="true"%>
<html>
<head></head>
<body>
<div class="error">
An error has occurred, the development team has been notified. Sorry for the inconvenience.
</div>
</body>
</html>

我可以直接点击页面没有错误。

更新:

如果您遇到此问题...请确保您的链中没有过滤器吞噬异常!请参阅下面的答案。

【问题讨论】:

  • 顺便说一下我的错误答案很抱歉。我已经把它删了。我不知道我为什么发布它。我显然将它与welcome-file 的行为混淆了。哎呀,在我自己的项目中,我什至将错误页面映射到前端控制器 servlet。一定是星期五。
  • 好的,回到您的问题:您的日志中是否也看到任何IllegalStateException: response already comitted
  • 发生在我们最好的人身上 :) 没有.. 日志中没有其他错误。

标签: java jsp servlets error-handling


【解决方案1】:

确保如果/error.page 映射到一个servlet,该Servlet 实现所有相关的do 方法(至少doPostdoGet)。

我遇到过类似的问题(空白页,没有显示),因为在我最初的实现中,我只实现了doGet

实际的do 调用可以集中在一个方法上,因为在大多数情况下对错误的处理非常相似。

【讨论】:

  • error.page 已映射并在我浏览它时出现。我现在只是使用 spring SimpleUrlHandlerMapping 将 .page url 映射到 .jsp 文件。但即使我在 DD 中切换到一个普通的旧 jsp 我仍然得到空白页.. 即使 jsp 基本上只是 html。
  • @danb。我建议您将其映射到 servlet 并验证 servlet 的 doGet/doPost 方法是否在引发异常时被调用。
  • 我不确定发生了什么..我将一个非常简单的 servlet 映射到 /error.err 并将它放在那里...它没有命中它..但我可以命中它手动没有问题。
  • @danb。在您的 Servlet 中覆盖 doService 并查看您是否正在点击它。此外,从您的 JSP 中删除 &lt;%@ page errorPage="/error.page" %&gt; 指令。使用错误页面,无论如何您都应该到达该页面
  • 我覆盖了所有的 do*() 和 service() 方法,只写了一些调试输出......不爱。我现在也尝试将 jasper 的开发模式设置为 false .. 那里也没有帮助。
【解决方案2】:

虚幻...原来链中有一个过滤器正在吞噬并吐出异常...所以它从未传播到足以被容器处理的高度!糟糕的形式!我把它拿出来了,现在一切都按预期工作了......抱歉噪音。

【讨论】:

  • 发生在我们最好的人身上:) 但是你有资格接受这个答案。
  • 它说我必须等待 2 天才能接受...哦,好吧.. 回到为自己制造问题...再次感谢。
【解决方案3】:

确保 /error.page 是有效的映射。如果您的错误页面本身有错误,它将导致 tomcat 显示其通用错误页面

【讨论】:

  • 我怀疑这正是原因。
  • 该页面是一个有效的映射,目前非常简单并且没有返回错误..我将它添加到问题中..我还尝试了一个普通的旧jsp
  • 用 代替 怎么样?像 500。我认为异常类型的匹配比较棘手。
  • 当我尝试这样做时,行为没有改变......不管怎样,返回的空白页面的状态为 200
  • 在浏览器的空白页上右击,查看源代码,你看到什么了吗?
【解决方案4】:

通常,如果您使用 /ErrorPage.jsp 或 /ErrorPage,您需要在 webapp/appname/ 目录或 Servlet 中有一个 JSP 文件(在部署描述符中使用正确的 url 映射)

此外,如果您在使用指令的同时使用 DD,则指令将始终优先。

【讨论】:

  • 我删除了指令以尝试让 DD 正常工作。 url 映射正确
  • 能否重启tomcat服务器再试一次?对 DD 的任何更改都需要重新启动。
  • 我重新启动并完成干净构建的次数比我今天数的要多。
【解决方案5】:

作为建议,除了向最终用户显示友好的消息外,您还应该考虑对异常做一些有用的事情,例如记录它或通知某人它发生了。

您可以通过访问请求中设置的各种属性来做到这一点,例如:

request.getAttribute("javax.servlet.error.message");

并在 bean 或内联 JSP 代码块中使用这些属性。

查看http://metatations.com/2011/11/20/global-exception-handling-in-java/了解更详细的说明。

【讨论】:

  • 是的,这就是本页的重点,我只是想设置管道,以便在该级别进行合理的错误报告。我最终通过我的日志系统记录了异常和有关用户的一些信息,然后通过电子邮件发送到我们的支持系统。
最近更新 更多