JSP异常处理
当我们编写JSP程序的时候,可能会遗漏一些BUG,这些BUG可能会出现在程序的任何地方。JSP代码中通常有以下几种异常:
1、 检查型异常:检查型异常就是一个典型的用户错误或者一个我们所无法预见的错误。如:如果一个文件将要被打开,但是无法找到这个文件,则一个异常被抛出,这些异常不能再编译期被简单地忽略。
2、 运行时异常:一个运行时异常可能已经被避免,这种异常在编译期将会被忽略。
3、 错误:这里没有异常,但问题是它超出了用户或者我们所控制的范围。错误通常会在代码中被忽略,根本不能拿它怎么样。如:栈溢出错误,这些错误都会在编译期被忽略。
使用Exception对象
exception对象是Throwable子类的一个实例,只在错误页面中可用。以下举例Throwable类中的一些重要的方法。
1、public String getMessage()
方法返回异常的信息,这个信息在Throwable构造函数中被初始化
2、public ThrowablegetCause()
方法返回引起异常的原因,类型为Throwable对象。
3、public String toString()
方法返回类名。
4、public void printStackTrace()
方法将异常栈轨迹输出至System.err
5、public StackTraceElement[] getStackTrace()
方法以栈轨迹元素数组的形式返回异常栈轨迹。
6、public ThrowablefillInStackTrace()
方法使用当前栈轨迹填充Throwable对象。
JSP提供了可选项来为每个JSP页面指定错误页面,无论何时页面抛出了异常,JSP容器都会自动地调用错误页面。如下举例为index.jsp指定了一个错误页面,使用<%@page errorPage=”XXXXX”%>指令指定一个错误页面。代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page errorPage="test.jsp" %>
<% String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Error Handling Example</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<% int x = 1; // Throw an exception to invoke the error page
if (x == 1)
{
throw new RuntimeException("Error condition!!!");
} %>
</body>
</html>
编写test.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<% String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Show Error Page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<h1>Opps...</h1>
<p>Sorry, an error occurred.</p>
<p>Here is the exception stack trace: </p>
<pre>
<% exception.printStackTrace(response.getWriter()); %>
</body>
</html>
test.jsp文件使用了<%@ page isErrorPage=“true” %>指令,这个指令告诉JSP编译器需要产生一个异常实例变量。现在访问index.jsp页面,页面结果如下: