[JSP] 예외 처리 페이지

Bam·2024년 5월 20일
0

Spring

목록 보기
33/48
post-thumbnail

예외 처리 페이지

(톰캣 기준) 웹 페이지에서 예외가 발생하면 다음과 같은 에러 발생 페이지가 뜹니다.프로그래밍 경험이 있다면 이 페이지는 예외 발생에 대한 정보를 주는 고마운 화면이지만 프로그래밍을 잘 모르는 사용자가 봤을 때 이런 페이지는 부정적인 경험을 줄 수 있습니다.

따라서 예외가 발생했을 때 예외 처리 페이지를 만들고 설정함으로써 예외 처리를 함과 동시에 사용자의 불안을 덜 수 있을 페이지를 만들어 두는 것이 좋습니다.


그러면 실습으로 예외 처리 페이지를 하나 만들고 띄워보겠습니다.

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 칸에 숫자를 제외한 문자열을 작성해주고 제출 버튼을 누르면 예외 처리 페이지로 이동하게 됩니다.


HTTP 상태 코드에 따른 예외 페이지

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>

0개의 댓글