如何在自定义错误页面(Tomcat)中获取消息?

Lea*_*rou 27 jsp tomcat custom-error-pages

在JSP中,您可以使用response.sendError(int code, String message)返回特定的错误代码(例如404找不到)和消息.只要您使用默认的丑陋Tomcat错误页面,这些消息就会显示正常.但是,如果您创建自定义错误页面,您如何获得该消息?我已经试过exception.getMessage()pageContext.getErrorData()却无济于事.我一直在寻找这个好几个小时,似乎没有人想知道同样的事情!:S

我忘了提到我到目前为止只用404s尝试过,因为这是我最需要的...由于某种原因异常是null,所以在它上面尝试任何东西都会抛出NullPointerException.错误页面是一个404错误页面,通过web.xml设置(因为我希望它显示每个单个404错误)和任何想知道的人,是的,它将isErrorPage指令设置为true ...

Gen*_*her 13

错误消息可通过javax.servlet.error.message错误页面jsp中的请求对象的属性获得.

以下是访问它的jsp语法:

<c:out value="${requestScope['javax.servlet.error.message']}"/>
Run Code Online (Sandbox Code Playgroud)

你可以看看在错误页中提供其他错误有关的信息在这里下的新的错误属性.

  • @Lea Verou:它确实有效.可能你没有在应用程序中启用jstl,所以c:out标签打印在HTML上,你从未看到它作为渲染输出. (2认同)

jit*_*ter 9

exception.getMessage()应该工作

尝试添加 exception.getClass().getName()

  1. 它可能是NullPointerException没有消息的
  2. 或者异常不是来自Sun,并且消息未正确设置

当然,只有正确记住,如果错误是由<%@ page errorPage="/yourerrorpage.jsp" %>顶部的jsp引发的,那么这只能起作用.

如果错误来自servlet,则异常详细信息将作为请求属性传递

javax.servlet.error.status_code    java.lang.Integer
javax.servlet.error.exception_type java.lang.Class
javax.servlet.error.message        java.lang.String
javax.servlet.error.exception      java.lang.Throwable
javax.servlet.error.request_uri    java.lang.String
javax.servlet.error.servlet_name   java.lang.String
Run Code Online (Sandbox Code Playgroud)

检查Servlet规范部分9.9


rus*_*gle 5

我很抱歉这么晚才回答,但我一周前就遇到了这个问题,我浏览了很多不同的网站,但没有人真正以我想听到的方式回答这个问题。在这篇文章中,我发现了一些有趣的解决方案,然后提出了我自己的解决方案。只需在您的页面中包含此来源即可:

<%
    out.println(pageContext.getErrorData().getRequestURI());
    out.println("<br/>");
    out.println(pageContext.getErrorData().getStatusCode());
    out.println("<br/>");
    out.println(pageContext.getException());
    out.println("<br/>");
%>
Run Code Online (Sandbox Code Playgroud)

它对我来说效果很好。