Spring MVC 에서 예외 처리하는 방식
1. @ControllerAdvice + @ExceptionHandler 이용한 처리
2. @ResponseEntity를 이용하는 예외 메세지 구성
(지금 1만 보고 나중에 2 추가)
@ControllerAdvice
해당 객체가 스프링의 컨트롤러에서 발생하는 예외를 처리하는 클래스임을 명시
@ExceptionHandler
해당 메서드가 () 들어가는 예외 타입을 처리한다는 것을 의미
1. 패키지 생성, Exception 처리 담당 클래스 생성 (CommonExceptionAdvice.java)
@ControllerAdvice
@Log4j
public class CommonExceptionAdvice {
@ExceptionHandler(Exception.class)
public String exception(Exception ex, Model model) {
log.error("|||Exception||| : "+ex.getMessage());
model.addAttribute("exception", ex);
log.error(model);
return "error_page";
}
}
2. servlet-context에 component-scan 할 패키지로 등록
<context:component-scan base-package="org.skwzz.exception" />
3. 에러 페이지 작성 ( error_page.jsp )
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4><c:out value="${exception.getMessage() }"></c:out></h4>
<hr>
<ul>
<c:forEach items="${exception.getStackTrace() }" var="stack">
<li><c:out value="${stack }"></c:out></li>
</c:forEach>
</ul>
</body>
</html>
4. 테스트 (get방식의 파라미터에 이상한 값 넣었음)
모든 예외 처리를 담당하는 메소드를 작성했는데
이번엔 404 페이지만 담당할 메소드를 만들겠음
Spring의 요청은 DispatcherServlet을 이용해 처리되므로 404 에러도 같이 처리할 수 있도록 web.xml 수정
5. web.xml에 해당 내용 추가
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
6. 만들었던 예외처리 클래스에 해당 메소드 추가
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex) {
return "custom404";
}
7. custom404.jsp 페이지 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>해당 페이지는 존재하지 않습니다.</h1>
</body>
</html>
8. 서버에 존재하지 않는 url로 요청 테스트
'Spring' 카테고리의 다른 글
Spring - MyBatis 연동 (0) | 2019.12.13 |
---|---|
Spring - Oracle 연결 테스트, CP 설정 (0) | 2019.12.13 |