본문 바로가기
IT Study/Spring

Spring - 예외 페이지 설정(@ 설정 / .xml설정)

by hhyyyjun 2023. 1. 3.

Spring에서 예외페이지를 설정하여 특정 예외 발생 시, 해당 에러페이지가 나올 수 있도록 구현해보았다.

웹 사이트를 이용하다보면 아래와 같은 에러페이지를 마주칠 수 있다.

에러 종류는 매우 다양하다. 대표적으로 404/500 에러 페이지가 있으며, 400대/500대 등의 여러 에러가 있다.

이번엔 에러 페이지를 직접 제작/설정하여 사용자의 편의성을 증가시킬 수 있도록 해보았다.

예외가 언제 발생?

존재하지 않는 데이터, null 값, 맞지 않는 데이터형식 등이 전달 되었을 때 에러 발생

에러처리 vs 에러페이지

1) 에러 처리

1-1) 에러 자체가 발생되지 않게 선처리(유효성 검사)

1-2) 에러가 발생하더라도, 넘어갈 수 있게(try-catch)

2) 에러 페이지 설정

에러 발생은 할 수 있음. 에러 발생 시, 왜 발생했는지, 어디로 가야하는지 안내해주는 페이지

1. @을 이용한 예외 페이지 설정

1) @을 앞으로 사용할 예정이라고 설정파일(.xml)에게 알려줘야 한다.

DispatcherServlet의 namespace에서 mvc 설정

<!-- 어노테이션 에러 설정 -->
<mvc:annotation-driven />

2) 예외 클래스 CommonExceptionHandler 생성

@ControllerAdvice("타겟 패키지")

에러가 발생했을 때 횡단관심처럼 동작하게 만들어주는 어노테이션이다.

해당 클래스를 객체화시킨다.

@ExceptionHandler("예외종류.class")

해당 메서드를 예외 handler로 설정

package com.kim.biz.common;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

//에러가 발생했을 때 횡단관심처럼 동작하게 만들어주는 어노테이션
//@ControllerAdvice("com.kim.biz") //CommonExceptionHandler를 객체화해주는 어노테이션
public class CommonExceptionHandler {
	//2022.09.28 에러페이지 작성
	
	@ExceptionHandler(NullPointerException.class) //어떤 종류의 예외인지
	public ModelAndView aException(Exception e) { 
		//어떤 예외가 발생했는지 보내기 위해 mav로 리턴
		ModelAndView mav = new ModelAndView();
		mav.addObject("exception",e);
		mav.setViewName("/error/error.jsp");
		return mav;
	}
	@ExceptionHandler(ArithmeticException.class) 
	public ModelAndView bException(Exception e) { 
		//어떤 예외가 발생했는지 보내기 위해 mav로 리턴
		ModelAndView mav = new ModelAndView();
		mav.addObject("exception",e);
		mav.setViewName("/error/error.jsp");
		return mav;
	}
	@ExceptionHandler(Exception.class)
	public ModelAndView cException(Exception e) { //미확인
		//어떤 예외가 발생했는지 보내기 위해 mav로 리턴
		ModelAndView mav = new ModelAndView();
		mav.addObject("exception",e);
		mav.setViewName("/error/error.jsp");
		return mav;
	}
}

 


2. .xml 설정을 통한 예외 페이지 설정

별도로 예외처리 클래스를 만들지 않아도 되는 장점이 있다.

DispatcherServlet 설정

<!-- xml로 예외 설정 -->
	<bean id="exceptionResolver"
		class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.NullPointerException">error/error.jsp</prop>
				<prop key="java.lang.ArithmeticException">error/error.jsp</prop>
                <prop key="java.lang.Exception">error/error.jsp</prop>
			</props>
		</property>
	</bean>

에러페이지 error.jsp 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>${exception.message}</h1>
<a href="login.do">go to Login</a>
</body>
</html>

isErrorPage = "true" 설정 => 해당 페이지를 에러페이지로 설정

어떤 에러인지 메세지 출력 되도록 하였고, 필요 시 로그인 화면으로 돌아갈 수 있도록 하였다.

결과 값

id값을 입력하지 않고 로그인 해보았다.

에러 메세지와 함께 에러 페이지가 출력되는 것을 확인하였다.

댓글