JSP 예외 처리
JSP 프로그램을 작성할 때 프로그래머는 일부 버그를 놓칠 수 있으며 이러한 버그는 프로그램의 어느 곳에나 나타날 수 있습니다. JSP 코드에는 일반적으로 다음과 같은 유형의 예외가 있습니다.
확인된 예외: 확인된 예외는 일반적인 사용자 오류 또는 프로그래머가 예측할 수 없는 오류입니다. 예를 들어, 파일을 열려고 하는데 파일을 찾을 수 없으면 예외가 발생합니다. 이러한 예외는 컴파일 타임에 단순히 무시할 수 없습니다.
런타임 예외: 프로그래머가 런타임 예외를 피했을 수 있습니다. 이 예외는 컴파일 타임에 무시됩니다.
오류: 여기에는 예외는 없지만 문제는 사용자나 프로그래머의 통제 범위를 벗어났다는 것입니다. 오류는 종종 코드에서 무시되며 이에 대해 할 수 있는 일이 거의 없습니다. 예를 들어 스택 오버플로 오류가 있습니다. 이러한 오류는 컴파일 타임에 무시됩니다.
이 섹션에서는 런타임 예외 및 오류를 처리하는 몇 가지 간단하고 우아한 방법을 제공합니다.
예외 객체 사용
예외 객체는 Throwable 하위 클래스의 인스턴스이며 오류 페이지에서만 사용할 수 있습니다. 다음 표에는 Throwable 클래스의 몇 가지 중요한 메소드가 나열되어 있습니다.
일련 번호 | 방법&설명 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | < Strong>public String getMessage()
<🎜>비정상적인 정보를 반환합니다. 이 정보는 Throwable 생성자에서 초기화됩니다. | ||||||||||||||
2 | public ThrowablegetCause()<🎜> < 🎜 >예외의 원인을 반환합니다. Throwable 객체를 입력하세요. | ||||||||||||||
3 | public String toString()<🎜>< br /><🎜>반환 클래스 이름 | ||||||||||||||
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>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>
이제 다음과 같이 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 태그 사용
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>
실행 결과는 다음과 같습니다.
try...catch 블록 사용
예외 처리를 한 페이지에 두고 여러 예외를 다르게 처리하려면 try를 사용해야 합니다. ...캐치 블록.
다음 예에서는 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에 액세스하려고 하면 다음과 같은 결과가 생성됩니다.
아아아아