JSP 예외 처리


JSP 프로그램을 작성할 때 프로그래머는 일부 버그를 놓칠 수 있으며 이러한 버그는 프로그램의 어느 곳에나 나타날 수 있습니다. JSP 코드에는 일반적으로 다음과 같은 유형의 예외가 있습니다.

  • 확인된 예외: 확인된 예외는 일반적인 사용자 오류 또는 프로그래머가 예측할 수 없는 오류입니다. 예를 들어, 파일을 열려고 하는데 파일을 찾을 수 없으면 예외가 발생합니다. 이러한 예외는 컴파일 타임에 단순히 무시할 수 없습니다.

  • 런타임 예외: 프로그래머가 런타임 예외를 피했을 수 있습니다. 이 예외는 컴파일 타임에 무시됩니다.

  • 오류: 여기에는 예외는 없지만 문제는 사용자나 프로그래머의 통제 범위를 벗어났다는 것입니다. 오류는 종종 코드에서 무시되며 이에 대해 할 수 있는 일이 거의 없습니다. 예를 들어 스택 오버플로 오류가 있습니다. 이러한 오류는 컴파일 타임에 무시됩니다.

이 섹션에서는 런타임 예외 및 오류를 처리하는 몇 가지 간단하고 우아한 방법을 제공합니다.


예외 객체 사용

예외 객체는 Throwable 하위 클래스의 인스턴스이며 오류 페이지에서만 사용할 수 있습니다. 다음 표에는 Throwable 클래스의 몇 가지 중요한 메소드가 나열되어 있습니다.

일련 번호 방법&설명
1< Strong>public String getMessage()
序号方法&描述
1public String getMessage()


返回异常的信息。这个信息在Throwable构造函数中被初始化
2public ThrowablegetCause()


返回引起异常的原因,类型为Throwable对象
3public String toString()


返回类名
4public void printStackTrace()


将异常栈轨迹输出至System.err
5public StackTraceElement [] getStackTrace()


以栈轨迹元素数组的形式返回异常栈轨迹
6public ThrowablefillInStackTrace()


使用当前栈轨迹填充Throwable对象

<🎜>비정상적인 정보를 반환합니다. 이 정보는 Throwable 생성자에서 초기화됩니다.
2public ThrowablegetCause()<🎜>
< 🎜 >예외의 원인을 반환합니다. Throwable 객체를 입력하세요.
3public String toString()<🎜>< br /><🎜>반환 클래스 이름
4public void printStackTrace()<🎜>
< 🎜>예외 스택 추적을 System.err로 출력
5public StackTraceElement [] getStackTrace()<🎜 >
<🎜>스택 추적 요소 배열 형식으로 예외 스택 추적을 반환
6public 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>

실행 결과는 다음과 같습니다.

jsp-exeception-1.jpg


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에 액세스하려고 하면 다음과 같은 결과가 생성됩니다.

아아아아