Servlet响应错误的动态错误页面

时间:2015-08-13 17:02:13

标签: java jsp servlets error-handling httpresponse

我尝试使用HttpServletResponse函数sendError(int,string)向JSP提供状态代码和自定义错误消息,因此我可以拥有动态错误页面(而不是许多特定的错误页面)对于每个错误代码/ Java异常)。但是,我似乎无法访问自定义消息,错误类型和堆栈跟踪。我可以访问URI和错误代码。我发送错误是这样的:

 response.sendError(HttpServletResponse.SC_BAD_REQUEST,"Some_Message");

我试图像这样得到回应:

 <div class="container">
        <div class="table-responsive">
            <table id="table" class="display">
                <tbody>
                    <tr>
                        <td><b>Error:</b></td>
                        <td>${pageContext.errorData.throwable.cause}</td>
                    </tr>
                    <tr>
                        <td><b>URI:</b></td>
                        <td>${pageContext.errorData.requestURI}</td>
                    </tr>
                        <td><b>Error Message:</b></td>
                        <td>${pageContext.errorData.throwable.message}</td>
                    <tr>
                        <td><b>Status code:</b></td>
                        <td>${pageContext.errorData.statusCode}</td>
                    </tr>
                    <tr>
                        <td><b>Stack trace:</b></td>
                        <td>
                            <c:forEach var="trace" items="${pageContext.errorData.throwable.stackTrace}">
                                <p>${trace}</p>
                            </c:forEach>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>

我的页面描述符设置如下:

<%@page contentType="text/html" pageEncoding="UTF-8" isErrorPage="true" 
import="java.io.*"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
编辑:我应该澄清一下,我知道堆栈跟踪和异常名称不会打印,除非实际抛出异常,我对打印自定义消息更感兴趣,因为这对调试问题很有用它们发生在标准测试/部署程序之后。

1 个答案:

答案 0 :(得分:1)

因此,只需将请求对象的消息指定为属性,然后从错误页面

访问该属性
request.setAttribute("err_msg",""Some_Message"");
response.sendError(HttpServletResponse.SC_BAD_REQUEST);

我真的记不住JSTL了,但最后访问了请求范围上下文,并搜索了"err_msg"