Latest web development tutorials

obsługa wyjątków JSP

Podczas pisania aplikacji JSP, programiści mogą przegapić jakiś błąd, błąd może pojawić się w dowolnym miejscu w programie. Kod JSP jest na ogół następujące kategorie wyjątek:

  • Sprawdzone wyjątki: sprawdzone wyjątki to typowy błąd użytkownika lub programista nieprzewidziane błędy. Na przykład, jeśli plik ma zostać otwarty, ale nie może znaleźć pliku, a następnie na wyjątek. Anomalie te nie mogą już kompilacji jest po prostu ignorowana.
  • Runtime wyjątek: runtime można było uniknąć programiści wyjątku, ta anomalia będą ignorowane w czasie kompilacji.
  • Błąd: Nie ma wyjątków, ale problemem jest to, że jest poza kontrolą użytkownika lub programisty. Błąd jest często pomijany w kodzie, ledwie można zabrać go jak. Tytułem przykładu, lub błędu przepełnienia stosu. Błędy te będą ignorowane w czasie kompilacji.

Ten rozdział zawiera kilka prosty i elegancki sposób obsługi wyjątków czasu wykonywania i błędy.


Stosowanie wyjątków Przedmioty

obiekt wyjątku jest instancją Throwable podklasy, dostępny tylko na stronie o błędzie. W poniższej tabeli przedstawiono niektóre z Throwable klasy w ważnych sposobów:

Nie. Sposób i opis
1 public String getMessage ()

Zwraca wyjątek. Informacja ta jest inicjowana w Throwable konstruktora
2 publicznego ThrowablegetCause ()

Zwraca przyczyny wyjątku obiekt typu Throwable
3 public String toString ()

Zwraca nazwę klasy
4 public void printStackTrace ()

Wyjście śladu stosu wyjątku do System.err
5 publicznego StackTraceElement [] getStackTrace ()

W postaci pierwiastka śladowego stos tablicy zwraca ślad stosu wyjątku
6 ThrowablefillInStackTrace publicznego ()

Bieżący ślad stosu wypełnienie obiektu Throwable

JSP zapewnia możliwość określenia stron błędów dla każdej strony JSP. Ilekroć strona zgłasza wyjątek, kontener JSP automatycznie wezwać stronę błędu.

Poniższe przykłady main.jsp określa stronę błędu. Użyj <% @ page errorPage = "XXXXX"%> Dyrektywa określa stronę błędu.

<%@ 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>

Teraz napiszcie ShowError.jsp następujące dokumenty:

<%@ 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()); %>

Stwierdzając, ShowError.jsp wykorzystuje plik <% @ page isErrorPage = "true"%> Dyrektywa, która informuje kompilator JSP musi wygenerować zmienną instancji wyjątku.

Teraz próbują uzyskać dostęp do strony main.jsp, będzie produkować następujące wyniki:

java.lang.RuntimeException: Error condition!!!
......

Opps...
Sorry, an error occurred.

Here is the exception stack trace:

Używaj tagów JSTL w stronę błędu

tagi JSTL może być używany do pisania strona błędu ShowError.jsp. W tym przykładzie kodu i układ logiczny w przykładzie kodu jest prawie taka sama, ale w tym przypadku kod ma lepszą strukturę, może dostarczać więcej informacji:

<%@ 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>

Wyniki przedstawiają się następująco:

JSP exeception-1


Użyj try ... catch

Jeśli chcesz umieścić stronę obsługę wyjątków, i dla różnych wyjątków są traktowane inaczej, to trzeba użyć bloku try ... catch.

Następny przykład pokazuje, jak używać bloku try ... catch, kod zostanie umieszczony w 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>

Spróbuj odwiedzić main.jsp, będzie produkować następujące wyniki:

An exception occurred: / by zero