JSP 예외 처리

박승현·2022년 5월 4일

JSP

목록 보기
10/11

예외 처리의 개요

예외 처리는 프로그램이 처리되는 동안 특정한 문제가 발생했을 때 처리를 중단하고 다른 처리를 하는 것으로 오류 처리라고도 한다. 웹 사이트를 이용하다가 주소를 잘못 입력하면 오류 페이지를 보게 된다. 이 페이지는 웹 서버가 제공하는 오류 페이지로 해당 페이지에 발생한 오류, 디렉터리 구조, 톰캣 버전 등의 정보가 나타나 있기 때문에 웹 보안이 취약하여 쉽게 해킹당 할 수 있다.

이와 같이 웹 애플리케이션 실행 도중에 발생할 수 있는 오류에 대비한 예외 처리 코드를 작성하여 비정상적인 종류를 막을 수 있다. 웹 애플리케이션에서 오류가 발생하더라도 정상적인 실행 상태를 유지하는 예외 처리 방법은 다음과 같다.

예외 처리 방법설명
page 디렉티브 태그를 이용한 예외 처리errorPage와 isErrorPage 속성을 이용한다.
web.xml 파일을 이용한 예외 처리<error-code> 또는 <exception-type> 요소를 이용한다.
try/catch/finally를 이용한 예외 처리자바 언어의 예외 처리 구문을 이용한다.

page디렉티브 태그를 이용한 예외 처리

page 디렉티브 태그를 이용한 예외 처리는 page 디렉티브 태그에 errorPage 와 isErrorPage속성을 사용하여 오류 페이지를 호출하는 방법이다.

errorPage 속성으로 오류 페이지 호출하기

errorPage 속성은 오류 페이지를 호출하는 page 디렉티브 태그의 속성이다. JSP 페이지가 실행되는 도중에 오류가 발생하면 웹 서버의 기본 오류 페이지를 대신하여 errorPage 속성에 설정한 페이지가 오류 페이지로 호출된다.

<%@page errorPage="오류 페이지 URL" %>

[errorPage 속성 사용 예]

<%@page contentType="text/html; charset=utf-8"%>
<%@page errorPage="error.jsp"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
<%
	String value=session.getAttrubute("id").toString();
%>
</body>
</html>

isErrorPage 속성으로 오류 페이지 만들기

isErrorPage 속성은 현재 JSP 페이지를 오류 페이지로 호출하는 page 디렉티브 태그의 속성이다. 이때 오류 페이지에서 exception 내장 객체를 사용할 수 있다.

메소드형식설명
getMessage()String오류 이벤트와 함께 들어오는 메시지를 출력한다.
toString()String오류 이벤트의 toString()을 호출하여 간단한 오류 메시지를 확인한다.
printStackTrace()String오류 메시지의 발생 근원지를 찾아 단계별로 오류를 출력한다.

다음은 현재 JSP 페이지가 오류 페이지가 되도록 page 디렉티브 태그에 isErrorPage 속성을 사용하는 예이다. 앞의 예에서 NullPointerException 오류가 발생하여 현재 JSP 페이지가 오류 페이지로 출력된다.

[isErrorPage 속성 사용 예]

//error.jsp
<%@page contentType="text/html; charset=utf-8"%>
<%@page isErrorPage="true"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
	<p>오류가 발생하였습니다.
    <p>예외 유형 : <%=exception.toString()%>
</body>
</html>

web.xml 파일을 이용한 예외 처리

web.xml 파일을 이용한 예외 처리는 web.xml 파일을 통해 오류 상태와 오류 페이지를 보여주는 방법으로, <error-page>...</error-page>요소 내에 처리할 오류 코드나 오류 유형 및 오류 페이지를 호출한다. web.xml 파일은 웹 애플리케이션의 /WEB-INF/폴더에 있어야 한다.

[<error-page>를 구성하는 하위 요소]

요소설명
<error-code>오류 코드를 설정하는 데 사용한다.
<exception-type>자바 예외 유형의 정규화된 클래스 이름을 설정하는 데 사용한다.
<location>오류 페이지의 URL을 설정하는 데 사용한다.

오류 코드로 오류 페이지 호출하기

오류 코드는 웹 서버가 제공하는 기본 오류 페이지에 나타나는 404, 500과 같이 사용자의 요청이 올바르지 않을 때 출력되는 코드로 응답 상태 코드라고도 한다. JSP 페이지에서 발생하는 오류가 web.xml 파일에 설정된 오류 코드와 일치하는 경우 오류 코드와 오류 페이지를 보여준다.

[주요 오류 코드의 종류]

코드설명
200요청이 정상적으로 처린된다.
307임시로 페이지가 리다이렉트된다.
400클라이언트의 요청이 잘못된 구문으로 구성된다.
401접근이 허용되지 않는다.
404지정된 URL을 처리하기 위한 자원이 존재하지 않는다.
405요청된 메소드가 허용되지 않는다.
500서버 내부의 에러이다.
503서버가 일시적으로 서비스를 제공할 수 없다.

다음은 오류 코드와 오류 페이지를 호출하는 예이다. 만약 사용자가 요청한 페이지가 없으면 404 오류가 발생하여 오류 페이지 errorCode_404.jsp를 출력한다. 또한 웹 페이지에서 10/0과 같이 잘못된 코드를 실행하는 경우 500오류가 발생하여 오류 페이지 errorCode_500.jsp를 출력한다.

[<error-code> 사용 예]

<web-app>
	<error-page>
		<error-code>404</error-code>
    	<location>/errorCode_404.jsp</location>
    </error-page>
    
    	<error-page>
		<error-code>500</error-code>
    	<location>/errorCode_500.jsp</location>
    </error-page>
</web-app>

예외 유형으로 오류 페이지 호출하기

예외 유형에 따른 오류 페이지 호출 방법은 JSP 페이지가 발생시키는 오류가 web.xml 파일에 설정된 예외 유형과 일치하는 경우 예외 유형과 오류 페이지를 보여준다.

[주요 예외 유형의 종류]

예외 유형설명
ClassNotFoundException클래스를 찾지 못했을 때 발생한다.
NullPointerExceptionnull 오브젝트로 접근했을 때 발생한다.
ClassCastException변환할 수 있는 유형으로 객체를 변환할 때 발생한다.
OutOfMemoryException메모리 부족으로 메모리를 확보하지 못했을 때 발생한다.
StackOverflowError스택 오버플로일 때 발생한다.
ArrayIndexOutOfBoundException범위 밖의 배열 첨자를 설정했을 때 발생한다.
NegativeArraySizeException음스로 배열 크기를 설정했을 때 발생한다.
illegalArgumentException부적절한 문자열을 수치로 변환하려 할 때 발생한다.
IOException요청된 메소드가 허용되지 않을 때 발생한다.
NumberFormatException부적절한 문자열을 수치로 변환하려 할 때 발생한다.
ArithmeticException어떤 값을 0으로 나누었을 때 발생한다.

[<exception-type> 요소 사용 예]

<web-app>
	<error-page>
		<exception-type>java.lang.NullPointerException</exception-type>
    	<location>/errorNullPointer.jsp</location>
    </error-page>
</web-app>
profile
그냥 해보자 안되더라도 해보자 끝까지 해보자

0개의 댓글