English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
При написании JSP-программ программисты могут пропустить некоторые БУГ, которые могут出现在 anywhere в программе. В JSP-коде обычно есть несколько типов исключений:
В этом разделе будут даны несколько простых и изящных способов обработки runtime исключений и ошибок.
Объект exception является примером подкласса Throwable, доступен только на странице ошибки. В таблице приведены некоторые важные методы класса Throwable:
Номер | Метод&Описание |
---|---|
1 | public String getMessage() Возвращает информацию об исключении. Эта информация инициализируется в конструкторе Throwable |
2 | public Throwable getCause() Возвращает причину исключения, типом является объект Throwable |
3 | public String toString() Возвращает имя класса |
4 | public void printStackTrace() Вывод трассировки исключения в System.err |
5 | public StackTraceElement [] getStackTrace() Возвращает трассировку исключения в виде массива элементов стека трассировки |
6 | public Throwable fillInStackTrace() Использовать текущий стек трассировки для наполнения объекта Throwable |
JSP предоставляет опцию для указания страницы ошибки для каждой страницы JSP. В任何 случае, если страница выбрасывает исключение, контейнер JSP автоматически вызовет страницу ошибки.
Следующий пример указывает на страницу ошибки для main.jsp. Используйте инструкцию <%@page errorPage="XXXXX"%> для указания страницы ошибки.
<%@ page errorPage="ShowError.jsp" %> <html> <head> <title>Пример обработки ошибок</title> </head> <body> <% // Внушить исключение для вызова страницы с ошибкой int x = 1; if (x == 1) } throw new RuntimeException("Error condition!!!"); } %> </body> </html>
现在,编写ShowError.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()); %>
注意到,ShowError.jsp文件使用了<%@page isErrorPage="true"%>指令,这个指令告诉JSP编译器需要产生一个异常示例变量。
现在试着访问main.jsp页面,它将会产生如下结果:
java.lang.RuntimeException: Error condition!!! ...... Opps... Sorry, an error occurred. Here is the exception stack trace:
可以利用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>Стек трассировки:</b></td> <td> <c:forEach var="trace" items="${pageContext.exception.stackTrace}"> <p>${trace}</p> </c:forEach> </td> </tr> </table> </body> </html>
Результат выполнения:
Если вы хотите обработать исключения на странице и различать различные исключения, вам нужно использовать блок try…catch.
Следующий пример показывает, как использовать блок try…catch, поместите этот код в main.jsp:
<html> <head> <title>Пример Try...Catch</title> </head> <body> <% try{ int i = 1; i = i / 0; out.println("Ответ: " + i); } catch (Exception e){ out.println("Произошла ошибка: " + e.getMessage()); } %> </body> </html>
Попробуйте посетить main.jsp, и вы получите следующий результат:
Произошла ошибка: / by zero