在JSP中,您可以使用response.sendError(int code, String message)
返回特定的错误代码(例如404找不到)和消息。
只要您使用默认的丑陋Tomcat错误页面,这些消息就会显示正常。但是,如果您创建自定义错误页面,您如何获得该消息?
我试过了exception.getMessage()
或pageContext.getErrorData()
但没有用。我一直在寻找这个好几个小时,似乎没有人想知道同样的事情! :S
我忘了提到我到目前为止只尝试过404s,因为这是我最需要的...由于某种原因异常是空的,所以在它上面尝试任何东西会抛出NullPointerException。 错误页面是一个404错误页面,通过web.xml设置(因为我希望它显示每个单个404错误),对于任何想知道的人,是的,它将isErrorPage指令设置为true ...
答案 0 :(得分:13)
错误页面jsp。
中的请求对象的javax.servlet.error.message
属性提供了错误消息
以下是访问它的jsp语法:
<c:out value="${requestScope['javax.servlet.error.message']}"/>
您可以在新错误属性下的错误页面here中查找可用的其他错误相关信息。
答案 1 :(得分:9)
嗯exception.getMessage()
应该有效
尝试添加exception.getClass().getName()
NullPointerException
没有消息当然,这只有在我正确记住的情况下,如果错误是由顶部有<%@ 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
检查Servlet Specification第9.9节
答案 2 :(得分:3)
我很抱歉这么晚才回答,但是我在一周前面对这个问题,我浏览了很多不同的网站,但没有人真正按照我想听的方式解决这个问题。在这篇文章中,我找到了一些有趣的解决方案,然后找到了我自己的解决方案。只需在您的网页中加入此来源:
<%
out.println(pageContext.getErrorData().getRequestURI());
out.println("<br/>");
out.println(pageContext.getErrorData().getStatusCode());
out.println("<br/>");
out.println(pageContext.getException());
out.println("<br/>");
%>
它对我来说非常好。
答案 3 :(得分:0)
你想要的东西对我来说很奇怪:)。那就是说,我会做以下事情:
以这种方式实施HttpResponseWrapper
以包装任何其他HttpResponse
:
public class HttpResponseWrapper implements HttpResponse {
private String errorMessage;
...
@Override
public void sendError(...) {
<save error message here>
}
...
}
创建过滤器并在此
对所有请求进行过滤,首先在链中
在错误页面中,检查响应是否为HttpResponseWrapper
收到你的留言
答案 4 :(得分:0)
只有在错误页面由于异常而非响应错误代码而加载时才会设置exception
的{{1}}部分。
在ErrorData
上查看sendError
的{{1}}。它提到了为什么你没有看到你传递给HttpServletResponse
的信息(强调我的):
使用指定的状态向客户端发送错误响应。服务器默认创建响应,使其看起来像包含指定消息的HTML格式的服务器错误页面,将内容类型设置为“text / html”,不改变cookie和其他标头。 如果对与传入的状态代码相对应的Web应用程序进行了错误页面声明,则将优先于建议的msg参数进行返回。
如果响应已提交,则此方法将抛出IllegalStateException。使用此方法后,应认为响应已提交,不应写入。
答案 5 :(得分:0)
您可以使用
${requestScope['javax.servlet.error.message']}
如果你没有页面上的jstl