如何重定向到servlet中的错误页面?

时间:2014-11-10 06:33:02

标签: java jsp servlets exception-handling error-handling

我正在编写servlet,如果发生异常,我会重定向到我的自定义错误页面,因为我已经这样做了。

在web.xml中

<error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/WEB-INF/jsp/ErrorPage.jsp</location>
</error-page>

在Servlet中,

protected void doPost(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
try{
       //Here is all code stuff
       Throw new Exception();
}catch(Exception e){

         e1.printStackTrace();

}

但是这里ErrorPage.jsp没有显示,我出错的地方有人可以解释一下吗?

3 个答案:

答案 0 :(得分:2)

您正在捕获异常,并且只在内部打印堆栈跟踪,因此错误页面不会生效,删除try-catch或重新抛出它将起作用。此外,您还有一些语法错误。尝试像

这样的东西
try{
       //Here is all code stuff
       throw new Exception();
}catch(Exception e){
         e.printStackTrace();
         throw new ServletException();
}

答案 1 :(得分:1)

问题是你捕获了Exception,因此没有Exception会离开你的doPost()方法。如果符合Exception {相同或其子类的<exception-type>的{​​{1}}离开doPost()方法,则只会重定向错误页面。

您应该重新考虑Exception中捆绑的RuntimeException,例如:

} catch(Exception e) {
    e1.printStackTrace();
    throw new RuntimeException(e);
}

不幸的是,如果我们正在讨论一般Exception,那么您无法抓住它,因为doPost()被声明只会抛出ServletException或{{ 1}}。你被允许不要抓住这些,但必须抓住IOException

答案 2 :(得分:1)

您已使用

处理了Exception中的doPost()
try{
       //Here is all code stuff
       Throw new Exception();
}catch(Exception e){
         e1.printStackTrace();    
}

trycatch阻止。所以不会调用errorPage.jsp。对未处理的异常

调用<error-page>

一个很好的示例教程Exception Handling

阅读更多信息Best practice error handling in JSP Servlets