JSP 애플리케이션을 개발하다 보면 런타임 시점에 다양한 예외(Exception)가 발생할 수 있습니다. JSTL(JSP Standard Tag Library)에서 제공하는 <c:catch> 태그는 태그 본문 안에서 발생하는 모든 Throwable 객체를 잡아내고, 필요에 따라 이를 변수로 노출할 수 있게 해줍니다. 이를 활용하면 페이지 전체가 비정상적으로 중단되는 것을 막고, 오류를 훨씬 더 부드럽고 우아하게 처리할 수 있습니다.
c:catch 태그의 속성
<c:catch> 태그는 다음과 같은 속성을 지원합니다.
| 속성 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|
| var | 본문 내 요소 실행 중 예외가 발생했을 때, 해당 java.lang.Throwable 객체를 저장할 변수의 이름입니다. | 아니요 | 없음 |
사용 예제
다음은 0으로 나누기 연산으로 인해 발생하는 ArithmeticException을 <c:catch> 태그로 처리하는 예제입니다.
<%@ taglib uri = "https://java.sun.com/jsp/jstl/core" prefix = "c" %>
<html>
<head>
<title><c:catch> 태그 예제</title>
</head>
<body>
<c:catch var ="catchException">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${catchException != null}">
<p>발생한 예외 : ${catchException} <br />
예외 메시지 : ${catchException.message}</p>
</c:if>
</body>
</html>위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
발생한 예외 : java.lang.ArithmeticException: / by zero 예외 메시지 : / by zero
동작 원리와 활용 팁
<c:catch> 태그는 try-catch 구문과 유사하게 동작합니다. 본문 안의 코드에서 예외가 발생하면 실행이 중단되고, 발생한 예외 객체가 var 속성에 지정한 변수에 저장됩니다. 이후 EL(Expression Language)을 통해 ${catchException}으로 예외 클래스 정보를, ${catchException.message}로 상세 메시지를 확인할 수 있습니다.
이처럼 <c:catch>는 특정 코드 블록 단위의 세밀한 예외 처리에 적합합니다. 반면 페이지 전체 또는 애플리케이션 전역의 예외를 일괄 처리해야 한다면, page 디렉티브의 errorPage·isErrorPage 속성이나 web.xml의 <error-page> 설정을 함께 활용하는 것이 좋습니다. 두 방식을 적절히 조합하면 사용자에게 친절한 오류 화면을 제공하는 견고한 JSP 애플리케이션을 만들 수 있습니다.