스프링(Spring) - 예외처리, 500 오류 (@ControllerAdvice)
목차

예외처리, 500 오류 처리하기 알아보기 스프링(Spring) - 예외처리, 500, 404 오류 (@ControllerAdvice)
@ControllerAdvice // 해당 객체가 스프링의 컨트롤러에서 발생하는 예외를 처리하는 존재임을 명시.
package com.koreait.exception;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import lombok.extern.log4j.Log4j;
@ControllerAdvice // 해당 객체가 스프링의 컨트롤러에서 발생하는 예외를 처리하는 존재임을 명시.
@Log4j
public class CommonExceptionAdvice {
@ExceptionHandler(Exception.class)
public String except(Exception e, Model model) {
// 예외가 발생하게 되면 해당 예외 필드가 메모리에 할당된다.
// 할당된 예외 필드의 주소 값을 받을 객체가 필요하므로 매개변수에 Exception타입의
// e 객체를 선언해놓는다.
log.error("Exception........" + e.getMessage());
model.addAttribute("exception", e);
log.error(model);
return "error_page";
}
}
위와 같이 코드를 작성하고, 객체를 관리하는 root-context.xml에서 exception을 스캔해줘야 한다.
namespace에서 context 체크

<context:component-scan base-package="com.koreait.exception" />
추가

s 붙은것을 확인할 수 있다.
이제 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" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>500</title>
</head>
<body>
<h4><c:out value="${exception.getMessage()}"/></h4>
<ul>
<c:forEach var="stack" items="${exception.getStackTrace()}">
<li><c:out value="${stack}"/></li>
</c:forEach>
</ul>
</body>
</html>
url 요청에 응답 오류를 고의로 작성하여 확인한다.
http://localhost:8080/sample/ex01?name=AAA&age=BBB

* 500 메시지는 Internal Server Error이므로 @ExceptionHandler를 이용해서 처리가 가능하지만
* 404 메시지는 잘못된 URL을 호출할 때 보이므로 다르게 처리해주어야 한다.
404error 페이지는 익셉션이 나지 않으므로, AOP로 보내기 위해서는 익셉션으로 만들어야 한다.
그것을 web.xml에서 처리한다.
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
servlet 태그 안에 init-param 태그를 추가한다.
404는 요청을 받았으면 응답을 해주어야 쓰레드에 메모리에서 해제한다.
@ResponseStatus를 하지 않으면 상태 오버플로우가 발생한다.
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex) {
return "error404_page";
}
익셉션으로 만들었으면 서버에 응답을 해주어야 한다.
error404_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" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>404</title>
</head>
<body>
<h2>해당 URL은 존재하지 않습니다.</h2>
</body>
</html>
http://localhost:8080/samd
URL에 없는 페이지를 요청하면 404 ERROR가 잘 뜨는것을 확인할 수 있다.

'⚙️ Backend > 스프링(Spring) Framework' 카테고리의 다른 글
스프링(Spring) -(1) 게시판 만들기 - MyBatis + Oracle DB 연동 (0) | 2021.05.10 |
---|---|
스프링(Spring) - 스프링 MVC 프로젝트의 기본 구성 (0) | 2021.05.10 |
(Spring MVC) Front-Controller 패턴 (0) | 2021.05.07 |
스프링 - Oracle TimeMapper 예제 (0) | 2021.05.07 |
MAC / Windows 이클립스 스프링, 오라클 연동, 마이바티스, log4jdbc 라이브러리 사용하기 (0) | 2021.05.07 |
댓글