JSP-예외 처리

이 챕터에서는. JSP에서 예외를 처리하는 방법에 대해 설명합니다. JSP 코드를 작성할 때 코드의 모든 부분에서 발생할 수있는 코딩 오류를 만들 수 있습니다. JSP 코드에서 다음과 같은 유형의 오류가 발생할 수 있습니다.

확인 된 예외

확인 된 예외는 일반적으로 사용자 오류 또는 프로그래머가 예측할 수없는 문제인 예외입니다. 예를 들어, 파일을 열어야하는데 파일을 찾을 수없는 경우 예외가 발생합니다. 이러한 예외는 컴파일시 무시할 수 없습니다.

런타임 예외

런타임 예외는 프로그래머가 피할 수 있었던 예외입니다. 확인 된 예외와 달리 런타임 예외는 컴파일시 무시됩니다.

오류

이것들은 전혀 예외가 아니라 사용자 나 프로그래머의 통제를 넘어서 발생하는 문제입니다. 오류에 대해 거의 아무것도 할 수 없기 때문에 오류는 일반적으로 코드에서 무시됩니다. 예를 들어 스택 오버플로가 발생하면 오류가 발생합니다. 또한 컴파일시 무시됩니다.

JSP 코드에서 발생하는 런타임 예외 / 오류를 처리하는 방법에 대해 자세히 설명합니다.

예외 개체 사용

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

S. 아니. 방법 및 설명
1

public String getMessage()

발생한 예외에 대한 자세한 메시지를 반환합니다. 이 메시지는 Throwable 생성자에서 초기화됩니다.

2

public Throwable getCause()

Throwable 객체가 나타내는 예외의 원인을 반환합니다.

public String toString()

결과와 연결된 클래스의 이름을 반환합니다. getMessage().

4

public void printStackTrace()

결과를 인쇄합니다. toString() 스택 추적과 함께 System.err, 오류 출력 스트림.

5

public StackTraceElement [] getStackTrace()

스택 추적의 각 요소를 포함하는 배열을 반환합니다. 인덱스 0의 요소는 호출 스택의 맨 위를 나타내고 배열의 마지막 요소는 호출 스택의 맨 아래에있는 메서드를 나타냅니다.

6

public Throwable fillInStackTrace()

이 Throwable 개체의 스택 추적을 현재 스택 추적으로 채우고 스택 추적의 이전 정보에 추가합니다.

JSP는 다음을 지정할 수있는 옵션을 제공합니다. Error Page각 JSP에 대해. 페이지에서 예외가 발생할 때마다 JSP 컨테이너는 자동으로 오류 페이지를 호출합니다.

다음은 오류 페이지를 지정하는 예입니다. main.jsp. 오류 페이지를 설정하려면<%@ page errorPage = "xxx" %> 지령.

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

이제 아래에 주어진 하나의 오류 처리 JSP ShowError.jsp를 작성합니다. 오류 처리 페이지에는 지시문이 포함되어 있습니다.<%@ page isErrorPage = "true" %>. 이 지시문은 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()); %></pre>
   </body>
</html>

액세스 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>

main.jsp에 액세스하면 다음이 생성됩니다.

Opps...

Error:

java.lang.RuntimeException: Error condition!!!

URI:

/main.jsp

Status code:

500

Stack trace:

org.apache.jsp.main_jsp._jspService(main_jsp.java:65)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Try ... Catch Block 사용

동일한 페이지 내에서 오류를 처리하고 오류 페이지를 실행하는 대신 조치를 취하려면 다음을 사용할 수 있습니다. try....catch 블록.

다음은 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에 액세스하면 다음과 같은 출력이 생성됩니다.

An exception occurred: / by zero