JSP에서 발생하는 예외를 보다 체계적이고 정보가 풍부한 형태로 출력하려면 JSTL(JavaServer Pages Standard Tag Library) 태그를 활용하여 오류 페이지 ShowError.jsp를 작성할 수 있습니다. 스크립틀릿(scriptlet)으로 자바 코드를 직접 작성하는 것보다 EL(Expression Language)과 JSTL을 사용하면 코드가 간결해지고 가독성이 크게 향상됩니다.
JSTL을 이용한 오류 페이지 예제
아래 예제는 pageContext 객체에서 제공하는 예외 정보와 errorData 객체의 요청 URI, 상태 코드 등을 테이블 형태로 깔끔하게 정리하여 보여줍니다.
<%@ taglib prefix = "c" uri = "https://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>코드 설명
- <%@ taglib %> : JSTL 코어 태그 라이브러리를 가져와서
<c:forEach>같은 반복문 태그를 사용할 수 있게 합니다. - isErrorPage = "true" : 해당 JSP 페이지가 오류 처리 전용 페이지임을 선언합니다. 이 속성이 설정되어야
exception내장 객체에 접근할 수 있습니다. - ${pageContext.exception} : 발생한 예외 객체 자체를 출력합니다.
- ${pageContext.errorData.requestURI} : 오류가 발생한 요청의 URI를 반환합니다.
- ${pageContext.errorData.statusCode} : HTTP 상태 코드(예: 500)를 반환합니다.
- ${pageContext.exception.stackTrace} : 스택 트레이스 배열을 순회하며 각 호출 단계를 출력합니다.
실행 결과
오류를 발생시키는 main.jsp에 접속하면 아래와 같은 결과 화면이 생성됩니다.
| 오류(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) |
이처럼 JSTL과 EL을 조합하면 복잡한 자바 코드 없이도 오류 메시지, 요청 URI, 상태 코드, 스택 트레이스까지 한눈에 파악할 수 있는 전문적인 오류 페이지를 손쉽게 구현할 수 있습니다.