해당 게시글의 전체 소스코드는 이곳 Github를 참고해 주세요


목차

  1. 예외 처리 동작 이해하기




Spring MVC에서의 예외 처리

  • 컨트롤러 별로 예외 처리
    • 컨트롤러의 메서드에서 예외가 발생했을 때의 처리를 정의
    • 별도의 예외 처리 메서드를 정의하고 그 메서드에 @ExceptionHandler 애노테이션 설정
  • 하나의 웹 애플리케이션 안에서 공통된 예외 처리
    • 복수의 컨트롤러에서 사용할 수 있는 공통된 예외 처리 클래스를 정의
    • 공통된 예외 처리 클래스를 정의하고 그 클래스에 @ControllerAdvice 애노테이션을 설정

ControllerAdvice 클래스

  • @Component 설정component-scan 을 통해 빈으로 등록
  • @ControllerAdvice 는 예외처리 클래스임을 선언
  • @ExceptionHandler 는 특정 예외를 처리할 메서드임을 선언

예외 처리 설정하기

  • servlet-context.xml
<context:component-scan base-package="org.doorisopen.myspring.excption" />
  • MemberServiceImpl.java
...
public MemberVO readMember(String id) throws Exception {
    if(memberDAO.read(id) ==  null) throw new DataNotFoundException(id);
    return memberDAO.read(id);
}
...

org.doorisopen.myspring.exception

  • MemberControllerAdvice.java 내용
@Component
@ControllerAdvice
public class MemberControllerAdvice {
	
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public String handleException(Exception e) {
    	e.printStackTrace();
        return "exception/error";
    }
    
    @ExceptionHandler(DataNotFoundException.class)
    public String handleException(DataNotFoundException e) {
    	e.printStackTrace();
        return "exception/not_found";
    }

}
  • DataNotFoundException.java 내용
public class DataNotFoundException extends Exception {
	
	private static final long serialVersionUID = 1000L;

    public DataNotFoundException() {
    }

    public DataNotFoundException(String msg) {
        super(msg);
    }

    public DataNotFoundException(Throwable th) {
        super(th);
    }
}
  • views -> exception -> error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Exception ERROR</title>
</head>
<body>
	예외 클래스 :	${exception.getClass().name} <br>
  	메시지 : 	${exception.message}
</body>
</html>
  • views -> exception -> not_found.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>DataNotFoundException</title>
</head>
<body>
	<h1>DataNotFoundException</h1>  
</body>
</html>

References

  • 대학교 웹 프레임워크 수업 정리한 내용 입니다.