(톰캣 기준) 웹 페이지에서 예외가 발생하면 다음과 같은 에러 발생 페이지가 뜹니다.프로그래밍 경험이 있다면 이 페이지는 예외 발생에 대한 정보를 주는 고마운 화면이지만 프로그래밍을 잘 모르는 사용자가 봤을 때 이런 페이지는 부정적인 경험을 줄 수 있습니다.
따라서 예외가 발생했을 때 예외 처리 페이지를 만들고 설정함으로써 예외 처리를 함과 동시에 사용자의 불안을 덜 수 있을 페이지를 만들어 두는 것이 좋습니다.
그러면 실습으로 예외 처리 페이지를 하나 만들고 띄워보겠습니다.
insertNumber.html
을 작성해주세요.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="insertNumber.jsp">
숫자만 입력: <input type="text" name="insert">
<input type="submit" name="submit" value="제출">
</form>
</body>
</html>
숫자 외의 입력을 하고 제출하면 예외 처리 페이지를 띄우도록 insertNumber.jsp
를 작성해주세요.
<%@ page
contentType="text/html;charset=UTF-8"
language="java"
pageEncoding="UTF-8"
errorPage="insertNumberExceptionPage.jsp"
%>
<%
int number = Integer.parseInt(request.getParameter("number"));
%>
<html>
<head>
<title>Title</title>
</head>
<body>
숫자를 입력하셨습니다.
</body>
</html>
페이지 디렉티브 태그에 errorPage
속성을 추가해서 예외 발생시 표시할 jsp 파일을 지정해줍니다.
이 페이지에서는 number 값을 받아오는데, 이때 전달된 값이 숫자가 아니라면 parseInt()
메소드를 사용하는 과정에서 예외가 발생하게 됩니다.
이제 예외가 발생하면 이동할 예외 페이지인 insertNumberExceptionPage.jsp
도 작성해줍니다.
<%@ page
contentType="text/html;charset=UTF-8"
language="java"
pageEncoding="UTF-8"
isErrorPage="true"
%>
<html>
<head>
<title>Title</title>
</head>
<body>
숫자만 입력해주세요.
</body>
</html>
isErrorPage=true
를 통해서 이 JSP 페이지가 예외 처리 페이지임을 알립니다.
서버를 실행하고 http://localhost:8090/HelloJSP_war_exploded/insertNumber.html
로 접속합니다. 그리고 input 칸에 숫자를 제외한 문자열을 작성해주고 제출 버튼을 누르면 예외 처리 페이지로 이동하게 됩니다.
JSP 페이지가 몇 없다면 위 방식대로해도 문제가 없겠지만 페이지가 많을경우 위처럼 일일이 페이지를 설정해주는 것은 생산성이 매우 떨어지는 작업이 됩니다.
그래서 예외가 발생하는 상태 코드에 따라 페이지를 지정하는 방법을 이용해서 각 예외 상황에 따른 페이지를 지정할 수도 있습니다.
에러 코드에 따른 페이지 지정은 web.xml
에서 설정 합니다.
<error-page>
<error-code>에러 코드</error-code>
<location>에러 페이지</location>
</error-page>
위에서 작성한 코드는 500
에러 코드를 발생시킵니다. 따라서 500 에러 코드가 발생했을 경우의 에러 페이지 실습을 해보겠습니다.
기존의
insertNumber.jsp
의 페이지 디렉티브 태그에서"errorPage=~~.jsp"
를 삭제해주세요.
web.xml
에 에러 페이지 내용을 적습니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<error-page>
<error-code>500</error-code>
<location>/errorpage/500.jsp</location>
</error-page>
</web-app>
500.jsp
의 내용은 다음과 같이 작성합니다.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
500 코드 에러 페이지
</body>
</html>