Spring

Spring 예외 페이지 설정

Clearing 2022. 9. 28. 14:23
728x90

예외 페이지는 사용자에게서 예외가 발생하였을 때 예외 페이지로 이동하여 안내함으로 써 사용자 편의성을

증대시키기 위해 설정한다.

 

언제 발생하는가?

ex) 불가능한 요청, 존재하지 않는 페이지 등등

 

에러 처리

- 에러 자체가 발생되지 않게 선처리(유효성 검사)
  에러가 발생하더라도, 넘어갈 수 있게(try-catch) 처리

vs

에러 페이지 설정
- 에러는 발생할수있지만
  에러 발생 시, 왜 발생했는지 -1
  어디로 가야 하는지 안내 -2 (가야 하는 페이지)

에러 페이지 설정은 @과 xml로 할 수 있다.

1) @ 설정

DispatcherServlet-servlet.xml에 @을 앞으로 사용할 거라고 알려줘야 한다. (Namespace -> mvc)

이후 DispatcherServlet-servlet.xml 내부에 <mvc:annotation-driven /> 작성

에러 페이지 @ 설정의 단점은 복잡하다는 것으로 사용하려면 예외처리 클래스를 1개 이상 만들어야 한다.

@ControllerAdvice("예외범위 설정") - 설정할 클래스
@ExceptionHandler("에러 종류") - 에러에 따라 발생시킬 메서드

 

예시로 작성한 클래스

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 {
		
		@ExceptionHandler(NullPointerException.class)
		public ModelAndView aException(Exception e) { // 널포인터 익셉션
			ModelAndView mav = new ModelAndView();
			mav.addObject("exception",e); // 왜 발생했는지
			mav.setViewName("/error/error.jsp"); // 어디로 가야하는지
			return mav;
		}
		
		@ExceptionHandler(ArithmeticException.class)
		public ModelAndView bException(Exception e) { // 수학적인 문제
			ModelAndView mav = new ModelAndView();
			mav.addObject("exception",e); // 왜 발생했는지
			mav.setViewName("/error/error.jsp"); // 어디로 가야하는지
			return mav;
		}
		
		@ExceptionHandler(Exception.class)
		public ModelAndView cException(Exception e) { // 미확인 예외
			ModelAndView mav = new ModelAndView();
			mav.addObject("exception",e); // 왜 발생했는지
			mav.setViewName("/error/error.jsp"); // 어디로 가야하는지
			return mav;
		}
}

 

2) XML 설정

@에 비해 간편하며 DispatcherServlet-servlet.xml 내부에 작성한다.

	<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings"> // 스프링 내부 변수이므로 변수의 이름은 고정
			<props>
				<prop key="에러 종류">이동시킬 에러 페이지</prop>
				<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>

 

728x90

'Spring' 카테고리의 다른 글

Mybatis 프레임워크  (1) 2022.10.04
Spring 다국어 처리  (0) 2022.09.29
Spring 이미지 업로드  (0) 2022.09.27
2-Layered 아키텍처  (0) 2022.09.26
Spring 다양한 @(어노테이션) 설정  (0) 2022.09.23