JSP异常处理
当写JSP代码,程序员可能会留下它可以发生在任何部分代码的编码错误。有以下的错误类型在JSP代码:
-
检查异常: 检查异常是一个例外,通常是用户错误或不能由程序员不可预见的问题。例如,如果一个文件被打开,但该文件无法找到,则会出现异常。这些例外并不能简单地在编译时被忽略。
-
运行时异常: 运行时异常是发生,大概本来是可以由编程人员避免异常。而不是检查异常,运行时异常是在编译时忽略不计。
-
错误: 这些都不是例外,但所出现超出用户或程序员的控制问题。错误通常忽略了代码,因为你可以减少做有关的错误。例如,如果发生堆栈溢出时,会产生一个错误。但在编译的时候还是被忽略了。
本教程会给你一些简单而优雅的方式来处理运行时产生在JSP代码异常/错误。
使用异常对象:
异常对象是可抛出(例如,java.lang. NullPointerException)的一个子类的实例,并仅在错误页面使用。以下是在Throwable类中提供重要方法列表。
SN | 方法和描述 |
---|---|
1 |
public String getMessage() Returns a detailed message about the exception that has occurred. This message is initialized in the Throwable constructor. |
2 |
public Throwable getCause() Returns the cause of the exception as represented by a Throwable object. |
3 |
public String toString() Returns the name of the class concatenated with the result of getMessage() |
4 |
public void printStackTrace() Prints the result of toString() along with the stack trace to System.err, the error output stream. |
5 |
public StackTraceElement [] getStackTrace() Returns an array containing each element on the stack trace. The element at index 0 represents the top of the call stack, and the last element in the array represents the method at the bottom of the call stack. |
6 |
public Throwable fillInStackTrace() Fills the stack trace of this Throwable object with the current stack trace, adding to any previous information in the stack trace. |
JSP提供了一个选项来为每个JSP指定错误页面。每当页面抛出一个异常,JSP容器自动调用的错误页面。
下面是一个例子,说明指定main.jsp一个错误页面。要设置一个错误页面,使用 <%@ page errorPage="xxx" %>指令。
<%@ page errorPage="ShowError.jsp" %> <html> <head> <title>Error Handling Example</title> </head> <body> <% // Throw an exception to invoke the error page int x = 1; if (x == 1) { throw new RuntimeException("Error condition!!!"); } %> </body> </html>
现在,写一个错误处理JSP ShowError.jsp,这将在下文给出。请注意,错误处理页面包含指令<%@ page isErrorPage="true" %>。该指令使JSP编译器生成的异常实例变量。
<%@ page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <p>Sorry, an error occurred.</p> <p>Here is the exception stack trace: </p> <pre> <% exception.printStackTrace(response.getWriter()); %> </pre> </body> </html>
现在尝试访问main.jsp,它应该产生的东西如下:
java.lang.RuntimeException: Error condition!!! ...... Opps... Sorry, an error occurred. Here is the exception stack trace:
使用JSTL标签为错误页面:
可以使用JSTL标记来写一个错误页面ShowError.jsp。在这里可以看到,我们已经用在上面的例子中几乎相同的逻辑,但是具有更好的结构,它提供了更多的信息:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <table width="100%" border="1"> <tr valign="top"> <td width="40%"><b>Error:</b></td> <td>${pageContext.exception}</td> </tr> <tr valign="top"> <td><b>URI:</b></td> <td>${pageContext.errorData.requestURI}</td> </tr> <tr valign="top"> <td><b>Status code:</b></td> <td>${pageContext.errorData.statusCode}</td> </tr> <tr valign="top"> <td><b>Stack trace:</b></td> <td> <c:forEach var="trace" items="${pageContext.exception.stackTrace}"> <p>${trace}</p> </c:forEach> </td> </tr> </table> </body> </html>
现在尝试访问main.jsp,它应该产生的东西如下:
Opps...
|
使用 Try...Catch 块:
如果要处理错误在同一个页面,并希望借此来代替触发一个错误页面的一些动作,在 try....catch块中使用。
下面是一个简单的例子展示了如何使用try... catch块。让我们把下面的代码在main.jsp中:
<html> <head> <title>Try...Catch Example</title> </head> <body> <% try{ int i = 1; i = i / 0; out.println("The answer is " + i); } catch (Exception e){ out.println("An exception occurred: " + e.getMessage()); } %> </body> </html>
现在尝试访问main.jsp,它应该产生的东西如下:
An exception occurred: / by zero
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:JSP异常处理
本文地址:http://www.codeinn.net/jsp/955.html