如何在servlet抛出运行时异常时在浏览器中显示用户友好的错误页面?

Rom*_*man 39 jsf jsp facelets custom-error-pages

我正在使用JSF开发Web应用程序.我测试了它,因为我能够但不时抛出运行时异常.

那么,每次抛出异常时如何将用户重定向到特殊错误页面(而不是显示完整tomcat日志的500错误)?

Bal*_*usC 59

只需声明一个<error-page>in web.xml,您可以在其中指定应在某个Throwable(或其任何子类)上显示的页面或HTTP状态代码.例如

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

这将在任何子类上显示错误页面java.lang.Exception,但因此不显示java.lang.Throwablejava.lang.Error.通过这种方式,您可以拥有自己的错误页面Throwable.例如java.sql.SQLException,java.io.IOException依此类推.

要么,

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

这将在HTTP 500错误上显示错误页面,但您也可以为404(未找到页面),403(禁止)等指定其他页面.

如果你<%@page isErrorPage="true" %>在top中声明error.jsp,那么你可以在EL中访问抛出的Exception(以及它的所有getter)${exception}.

<p>Message: ${exception.message}</p>
Run Code Online (Sandbox Code Playgroud)

另请参阅有关该主题Java EE 5教程.

  • 非JSP的等价物是`request.getAttribute(RequestDispatcher.ERROR_EXCEPTION)`. (4认同)

Pas*_*ent 10

在您的web.xml中:

<error-page>
  <error-code>500</error-code>
  <location>/errorpages/500.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

您还可以捕获扩展的特定异常或异常Throwable:

<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/errorpages/500.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)