JSP 프로그램을 작성할 때 프로그래머는 일부 버그를 놓칠 수 있으며 이러한 버그는 프로그램의 어느 곳에서나 나타날 수 있습니다. JSP 코드에는 일반적으로 다음과 같은 유형의 예외가 있습니다.
확인된 예외: 확인된 예외는 일반적인 사용자 오류 또는 프로그래머가 예측할 수 없는 오류입니다. 예를 들어, 파일을 열려고 하는데 파일을 찾을 수 없으면 예외가 발생합니다. 이러한 예외는 컴파일 타임에 단순히 무시할 수 없습니다.
런타임 예외: 프로그래머가 런타임 예외를 방지했을 수 있습니다. 이 예외는 컴파일 타임에 무시됩니다.
오류: 여기에는 예외가 없지만 문제는 사용자나 프로그래머의 통제 범위를 벗어났다는 것입니다. 오류는 코드에서 무시되는 경우가 많으며 이에 대해 할 수 있는 일이 거의 없습니다. 예를 들어 스택 오버플로 오류가 있습니다. 이러한 오류는 컴파일 타임에 무시됩니다.
이 섹션에서는 런타임 예외 및 오류를 처리하는 몇 가지 간단하고 우아한 방법을 제공합니다.
예외 객체는 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 컨테이너는 자동으로 오류 페이지를 호출합니다.
다음 예에서는 main.jsp에 대한 오류 페이지를 지정합니다. 오류 페이지를 지정하려면 <%@page errorPage="XXXXX"%> 지시어를 사용하세요.
<%@ page errorPage="ShowError.jsp" %><html><head> <title>오류 처리 예</title></head><body><% // 오류 페이지를 호출하기 위한 예외 발생 int x = 1; if (x == 1) { throw new RuntimeException("오류 조건!!!") %></body></html>
이제 다음과 같이 ShowError.jsp 파일을 작성합니다.
<%@ page isErrorPage="true" %><html><head><title>오류 페이지 표시</title></head><body><h1>반대...</h1><p>죄송합니다. 오류가 발생했습니다.</p><p>예외 스택 추적은 다음과 같습니다. </p><pre><% 예외.printStackTrace(response.getWriter());
ShowError.jsp 파일은 JSP 컴파일러에게 예외 인스턴스 변수를 생성해야 함을 알리는 <%@page isErrorPage="true"%> 지시문을 사용합니다.
이제 main.jsp 페이지에 액세스하면 다음과 같은 결과가 나타납니다.
java.lang.RuntimeException: 오류 조건!!!......Opps...죄송합니다. 오류가 발생했습니다. 예외 스택 추적은 다음과 같습니다.
JSTL 태그를 사용하여 오류 페이지 ShowError.jsp를 작성할 수 있습니다. 이 예제의 코드는 이전 예제의 코드와 거의 동일한 논리를 가지고 있지만 이 예제의 코드는 더 잘 구성되어 있으며 더 많은 정보를 제공합니다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@page isErrorPage="true" %><html><head><title> 오류 페이지 표시</title></head><body><h1>반대...</h1><table><tr valign="top"><td><b>오류:</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>상태 코드:</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 블록을 사용해야 합니다.
다음 예에서는 이 코드를 main.jsp에 배치하여 try...catch 블록을 사용하는 방법을 보여줍니다.
<html><head> <title>Try...Catch 예</title></head><body><% try{ int i = 1; i = i / 0; + i); } catch (예외 e){ out.println("예외가 발생했습니다: " + e.getMessage()) %></body></html>
main.jsp에 액세스해 보면 다음과 같은 결과가 나타납니다.
예외가 발생했습니다: / 0