Servlet 异常处理


Servlet 异常处理

在Web应用程序中,问题总是会发生。可能会出现各种各样的问题,包括断电、硬件故障、数据库连通性、网络故障等。 在服务器端,通常使用 Servlet 进行处理。在开发过程中,必须要处理异常情况——这就是异常控制。

Servlet 异常分类

异常分为两类:已检异常和未检异常。

  • 已检异常:在方法声明中列出的异常是已检异常。程序必须抛出该异常或处理该异常。ClassNotFoundException、IOException是已检异常之一。
  • 未检异常:程序可以选择在代码中捕获,也可以没有明确定义的异常。NullPointerException、ArithmeticException是未检异常之一。

对于 Servlet,所有的异常都应分为两类:

  • IOException:表示一般错误或网络错误,是一般的 50X 类错误。
  • ServletException:表示专门的 Servlet 错误。如果 ServletException 没有其他原因,那么容器返回通用 50X 错误。

为了提供更具体的错误消息,我们要创建自定义异常类。

Servlet 异常处理技术

异常处理技术通常包括 try-catch-finally 块。我们可以使用 try 块将可能会抛出异常的代码包含在其中。如果发生异常,catch 块中的代码将会执行。无论是否有异常抛出,finally 块中的代码都会执行。例如:

try {
    // 可能会抛出异常的代码
} catch (Exception e) {
    // 处理异常情况的代码
} finally {
    // 总是会执行的代码
}

如果 catch 块中的代码处理了异常并将其“吞下”,则可能会导致更大的问题。对于 Web 应用程序,最好不要吞下异常。相反,应该创建一个良好的异常控制机制,以合理处理它们。

Servlet 错误页面

另一种处理异常的方法是 Web.xml 文件。在设置错误页面时,可以使用Web.xml。

为了设置错误页面,必须使用 元素。下面是一个示例:

<web-app>
    <error-page>
        <error-code>404</error-code>
        <location>/error.html</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/error.html</location>
    </error-page>
</web-app>

在上面的示例中,我们已经设置了错误页面。如果我们使用的服务器遇到两种类型的异常(404 编码和 java.lang.Exception 异常),则 Web 应用程序将重定向到 / error.html。

总结

在 Servlet 中,异常处理是必不可少的。下面是在开发过程中应注意的几个要点:

  • 捕获异常部分应该把以下语句放在前面:
try {
    // 可能会抛出异常的代码
} catch (Exception e) {
    // 处理异常的代码
} finally {
    // 总是会执行的代码
}
  • 捕获异常的代码不应该吞下异常。异常处理应该更好地处理它们。
  • 使用自定义异常类可以提供更具体的错误消息。
  • 使用 Web.xml 文件可以设置错误页面,以处理服务器错误。