교육과정 기록/💻back-end

[7.27] JSP - 예외 처리

춘식이왔엉 2022. 7. 27. 19:12

* Web Application 의 예외처리 방법 3가지 *

1. page directive의 "isErrorPage"와 "errorPage"속성을 이용한 예외처리

    ( exception 내장 객체를 이용한 예외 처리 )

       - "JSP 전용" 예외처리 방식

       - 유지보수 어려운 단점 

 * 아래 방법2,3은 Web Application "공통" 예외처리 방식

2. web.xml에 예외처리 설정하는 방식(HTTP status code기반)

3. web.xml에 예외처리 설정하는 방식(예외타입 기반)

 

1.exception 내장 객체를 이용한 예외 처리

1. 예외를 발생시키는 JSP 작성

- JSP명 : divide.jsp

- 0으로 나누어 NullPointerException 발생

<%@ page 
        language="java" 
        isErrorPage="false"
        errorPage="/JSP/exceptionHandling.jsp"
        contentType="text/html; charset=UTF-8" 
        pageEncoding="UTF-8"%>

<% // scriptlet Tag
    int n = 4 / 0;
%>

isErrorPage="false"

- "이 페이지는 예외를 처리하는게 아닌 발생시키는 페이지이다. " 라고 JSP 컨테이너에게 알리는 역할

errorPage="/JSP/exceptionHandling.jsp"

- 예외가 발생하면 이 속성에 지정한 JSP(/exceptionHandling.jsp)로 예외를 전달해주세요~!

 

2. 예외를 처리하는 JSP 작성

isErrorPage="true"

- 다른 JSP에서 발생하는 예외(Exception)를 내장객체인 exception으로 받아서 예외처리하는 역할을 수행

<%@ page 
        language="java" 
        isErrorPage="true"
        contentType="text/html; charset=UTF-8" 
        pageEncoding="UTF-8"%>

<!-- 이 JSP는, 다른 JSP에서 발생하는 예외(Exception)를 내장객체인 exception으로 받아서,
    예외처리하는 역할을 수행(isErrorPage="true"인 경우)-->

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>error</title>
</head>
<body>
    <h1>/JSP/exceptionHandling.jsp</h1>
    <hr>

    <!-- 내장객체인 exception 사용가능 -->

    <h1>Lorem ipsum dolor sit amet consectetur adipisicing elit.</h1>

    <h2><%= exception.getClass() %> : <%= exception %></h2>
    <ol>
        <%  //scriptlet Tag
            StackTraceElement[] stackTrace = exception.getStackTrace();

            for(StackTraceElement element : stackTrace) {
        %>        
                    // Expression Tag
                    <li>at <%= element %></li>

        <%  } // enhanced for %>
    </ol>
</body>
</html>

 

- /divide.jsp 페이지 실행