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

3

我正在编写一个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个回答

2

您已经捕获了异常,并只在内部打印堆栈跟踪,因此错误页面不起作用,请删除try-catch或重新抛出它,这样就可以正常工作。此外,您还有一些语法错误。尝试使用类似以下的内容:

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

谢谢,我已经得到解决方案了。你知道如何在ErrorPage.jsp中获取异常详细信息吗?我的意思是,我想显示错误状态码。 - Raghu

1
问题在于你捕获了异常,因此任何异常都不会离开你的doPost()方法。只有当一个匹配<exception-type>(完全相同或其子类)的Exception离开你的doPost()方法时,你才会被重定向到错误页面。
你应该重新抛出包含在RuntimeException中的Exception,例如:
} catch(Exception e) {
    e1.printStackTrace();
    throw new RuntimeException(e);
}

很不幸,如果我们谈论一般的Exception,你不能不捕获它,因为doPost()被声明为只抛出ServletExceptionIOException的实例。你可以不捕获这些异常,但必须捕获java.lang.Exception


非常感谢,它起作用了,我该如何在我的 ErrorPage.jsp 中获取异常详细信息呢?我的意思是,我想显示错误状态码。 - Raghu
@Raghu 你是什么意思? /WEB-INF/jsp/ErrorPage.jsp 文件是你的,你可以将其编辑成任何你想要的自定义页面。 - icza
不需要太多自定义,我只想显示错误状态码。 - Raghu
在 JSP 中,它的异常未定义。 - Raghu
@Raghu 在error.jsp中必须将 isErrorPage 定义为 true 才能像这样访问 exception(您可以更改其他部分,这只是一个示例):<%@ page isErrorPage="true" import="java.io.*" contentType="text/html"%> - icza
显示剩余2条评论

1

您在 doPost() 中使用了 Exception

try{
       //Here is all code stuff
       Throw new Exception();
}catch(Exception e){
         e1.printStackTrace();    
}

使用trycatch块来捕获错误,这样就不会调用errorPage.jsp。对于未处理的异常,将调用<error-page>
一个不错的示例教程 异常处理
阅读更多信息 JSP Servlets中最佳实践错误处理

谢谢,这个教程真的帮了我很多。 - Raghu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接