JSP 异常处理 (exception)

编写 JSP 应用程序难免会遗漏一些 BUG ,这些 BUG 可能出现在任何地方,一旦触发了这些 BUG,我们的 JSP 应用程序可能就会崩溃

为了能够拦截和处理这些 BUG 和异常,我们必须先知道 BUG 有几种类型 ?

JSP 应用程序通常会有以下几类异常

  • 检查型异常
    检查型异常就是一个典型的用户错误或者一个程序员无法预见的错误 举例来说,如果一个文件将要被打开,但是无法找到这个文件,则一个异常被抛出
    这些异常不能再编译期被简单地忽略
  • 运行时异常
    一个运行时异常可能已经被程序员避免,这种异常在编译期将会被忽略
  • 错误
    错误不是异常,但问题是它超出了用户或者程序员的控制范围
    错误通常会在代码中被忽略,您几乎不能拿它怎么样
    举例来说,栈溢出错误
    这些错误都会在编译期被忽略

既然知道了有多少总异常,那就好办了,我们可以对症下药

总的来说,我们有以下几种方法来处理运行时异常和错误

使用 Exception 对象

JSP exception 对象是 Throwable 子类的一个实例,只在错误页面中可用

Throwable 类一些重要的方法

方法&描述
public String getMessage()
返回异常的信息。这个信息在Throwable构造函数中被初始化
public ThrowablegetCause()
返回引起异常的原因,类型为Throwable对象
public String toString()
返回类名
public void printStackTrace()
将异常栈轨迹输出至System.err
public StackTraceElement [] getStackTrace()
以栈轨迹元素数组的形式返回异常栈轨迹
public ThrowablefillInStackTrace()
使用当前栈轨迹填充Throwable对象

JSP page 指令

JSP page 指令中的 errorPage 属性可以为 JSP 页面指定错误页面

无论何时页面抛出了异常,JSP 容器都会自动地调用错误页面

JSP 错误处理页面

一个 JSP 也要要成为错误页面,必须使用 <%@ page isErrorPage="true" %> 指定该页面能处理错误,不然 JSP 容器不会它错误交给它来处理

范例

这个范例,我们用 <%@page errorPage="XXXXX" %> 指令为 throw_error.jsp 页面指定一个错误页面 show_error.jsp

webapp/throw_error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="show_error.jsp" %>
<!DOCTYPE html>
<meta charset="utf-8"/>
<title>错误处理范例 - JSP 基础教程 | 简单教程(www.twle.cn)</title>
<%
   // 抛出一个异常
   int x = 1;
   if (x == 1)
   {
      throw new RuntimeException("Error condition!!!");
   }
%>

webapp/show_error.jsp

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true" %>
<!DOCTYPE html>
<meta charset="utf-8"/>
<title>错误页面 - JSP 基础教程 | 简单教程(www.twle.cn)</title>
<h1>Opps...</h1>
<p>Sorry, an error occurred.</p>
<p>Here is the exception stack trace: </p>
<pre>
<% exception.printStackTrace(response.getWriter()); %>
</pre>
<p>错误页面 - JSP 基础教程 | 简单教程(www.twle.cn)</p>

在浏览器上输入 http://localhost:8080/jsp/throw_error.jsp 显示如下

JSP 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.