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 文件可以设置错误页面,以处理服务器错误。