Skip to content

spring exception #
Find similar titles

Structured data

Category
Programming

서론. #

프로그램이 실행 중 오류가 발생할 때 예외(Exception)이라고 한다. Java에서의 예외처리 개념은 Java/Exception Handling 페이지에서 자세히 확인할 수 있다. 본 글에서는 Java/Exception Handling에서 다루지 않은 예외 처리 실행결과 문을 분석하는 방법과 JSP 예외 처리 방법에 대해 알아보고자 한다.

본론. Exception Handling #

Exception 실행결과 문 의미 #

ExceptionExample.java 소스

class ExceptionExample{
    public static void main(String[] args) throws Exception{
        firstMethod();
    }

    static void firstMethod() throws Exception {
        secondMethod();
    }

    static void secondMethod() throws Exception {
        throw new Exception();
    }
}

ExceptionExample.java 실행결과

java.lang.Exception
    at.ExceptionExample.secondMethod(ExceptionExample.java:11)
    at.ExceptionExample.firstMethod(ExceptionExample.java:7)
    at.ExceptionExample.main(ExceptionExample.java:3)

위의 ExceptionExample.java 실행결과 문 첫 줄을 통해 java.lang.Exception 예외가 발생했음을 알 수 있다. 또한, 예외가 발생했을 때 호출 스택(call stack)에는 모두 3개의 메서드(main, firstMethod, secondMethod)가 있었다는 것을 알 수 있다. 쉽게 말하자면 3개의 메서드가 실행 중에 있었다는 것을 알 수 있다. 예외가 발생한 지점은 두 번째 줄의 secondMethod()라는 것을 알 수 있다. 차례대로 secondMethod()는 firstMethod()가 호출했고 firstMethod()는 main()가 호출했음을 알 수 있다. 즉 호출된 3개의 메서드 중 어느 곳에서도 예외처리를 해주지 않았기 때문에 프로그램은 비정상적으로 종료되었음을 알 수 있다.

위의 예시 코드를 정상적으로 종료시키기 위해서는 Java/Exception Handling 페이지에서 설명한 대로 try/catch 문을 적용해주면 된다.

ExceptionExample.java 소스

class ExceptionExample{
    public static void main(String[] args){
        firstMethod();
    }

    static void firstMethod() throws Exception {
        try {
            throw new Exception();
        } catch (Exception e){
            System.out.println("firstMethod메서드에서의 예외가 처리되었음")
        };
    }
}

ExceptionExample.java 실행결과

firstMethod 메서드에서의 예외가 처리되었음

JSP 예외처리 #

image

그림1 에러 페이지 화면 예시 (출처: TickTalk - T스토리)

위의 그림1과 같이 에러 페이지 화면은 웹사이트에 대한 신뢰를 떨어뜨린다. 아래 그림2와 같이 사용자에게 친숙한 에러 화면을 보여 주는 것이 일반적이다.

image

그림2 에러 페이지 화면 예시2 (출처: 마스타 - T스토리)

JSP에서는 주요 응답 상태 코드별로 에러 페이지를 지정하여 커스텀 에러 페이지를 보여 줄 수 있다. WEB-INF/web.xml에서 아래와 같이 error-page 속성을 작성하면 된다.

<error-page>
    <error-code>404</error-code>
    <location>/error/error404.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/error/error500.jsp</location>
</error-page>

응답 코드가 404라면 /error/error404.jsp를 출력하고 응답 코드가 500이라면 /error/error500.jsp를 출력한다. 크롬에서는 커스텀 에러 페이지 화면이 정상적으로 나오나 IE에서는 전체 응답 결과 데이터 길이가 513바이트보다 작으면 자체적으로 제공하는 HTTP 오류 메시지 화면이 출력된다. 팁을 주자면 error500.jsp를 작성할 때 아래와 같이 513바이트가 넘어갈 수 있도록 주석을 남기는 방법을 사용한다면 익스플로러에서도 커스텀 에러 페이지를 사용할 수 있다.

/error/error500.jsp

<html>
    <head>...</head>
    <body>
        <section id="container">
            <div class="content">
                <div class="contentWrap">
                    <div class="common_content">
                        <div class="common_error">
                            <i class="ico_error"></i>
                            <p class="dsc_message">페이지를 찾을 수 없습니다.</p>
                            <a href="/main" class="btn_home btn_ani">홈으로 가기</a>
                        </div>
                    </div>
                </div>
            </div>
        </section>
    </body>
</html>
<!--
    응답 코드가 404라면 /error/error404.jsp를 출력하고 응답 코드가 500이라면 /error/error500.jsp를 출력한다. 크롬에서는 커스텀 에러 페이지 화면이 정상적으로 나오나 IE에서는 전체 응답 결과 데이터 길이가 513바이트보다 작으면 자체적으로 제공하는 HTTP 오류 메시지 화면이 출력된다. 팁을 주자면 error500.jsp를 작성할 때 아래와 같이 513바이트가 넘어갈 수 있도록 주석을 남기는 방법을 사용한다면 익스플로러에서도 커스텀 에러 페이지를 사용할 수 있다. 이러한 주석을 통해 513바이트를 넘기면 된다. 참고로 본 주석은 513바이트이다.
-->

참고출처 #

관련 키워드 #

java exception, 예외, 예외처리, Exception, Exception Handling

0.0.1_20210630_7_v33