在RequestDispatcher上调用转发时处理异常

时间:2014-09-01 14:51:48

标签: jsp java-ee servlets

这是我的代码。

try {
    RequestDispatcher d = request
            .getRequestDispatcher("messages/error.jsp");
    request.setAttribute("message", "Error Occurred !!!");
    d.forward(request, response);
} catch (ServletException se) {
    se.printStackTrace();
} catch (IOException ioe) {
    ioe.printStackTrace();
}

我需要知道如何在给定代码中处理ServletExceptionIOException。我希望将用户重定向到错误页面并告诉用户在获得上述异常时发生错误。

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以将服务器配置为处理特定的异常类或状态代码,在这种情况下,您必须将下一行添加到web.xml

<error-page>
   <exception-type>javax.servlet.ServletException</exception-type>
   <location>/error.jsp</location>
</error-page>

同样对于IOException,当应用程序服务器捕获未处理的ServletException时,使用此配置将显示error.jsp。 error.jsp页面应具有属性isErrorPage =“true”,通过此属性,您可以访问包含与抛出的异常相关的所有信息的exception变量。我举了一个显示堆栈跟踪的例子。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true" %>
<html>
<head>
   <title>Error Handling Example</title>
</head>
<body>
     <%=exception.getMessage()%>
     <% exception.printStackTrace(response.getWriter()); %>
</body>
</html>

您还需要删除catch块代码。

答案 1 :(得分:0)

您可以在catch块中遇到异常时重定向:示例:

try {
    //Do whatever you need here
} catch (ServletException se) {
request.setAttribute("message", "Error Occurred !!! + \n"+ se.getMessage());
RequestDispatcher d = request
            .getRequestDispatcher("messages/error.jsp");
    d.forward(request, response);
    se.printStackTrace();
} catch (IOException ioe) {
 request.setAttribute("message", "Error Occurred !!! + \n"+ se.getMessage());
RequestDispatcher d = request
            .getRequestDispatcher("messages/error.jsp");
    d.forward(request, response);
    ioe.printStackTrace();
}

然后在你的error.jsp中你需要得到属性;

${message}//recommended

或者如果您使用不推荐的划线,请执行以下操作:

request.getAttribute("message");