유효하지 않은 URL 입력 시 출력되는 404에러 페이지
보통은 쿼리문이 잘못 되었을 때 출력되는 500에러 페이지
에러 페이지에도 BootStrap를 적용시켜 꾸미는 방법을 배웠다.
우선, 500 에러 페이지부터 처리해보자.
1)예외처리를 위한 패키지 및 클래스 생성
<CommonExceptionAdvice>
package com.webjjang.exception;
import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;
import lombok.extern.log4j.Log4j;
// 자동 생성과 역할
@ControllerAdvice
@Log4j
public class CommonExceptionAdvice {
// Exception 예외가 발생되면 가져와서 처리해준다.
@ExceptionHandler(Exception.class)
public String except(Exception ex, Model model) {
// console에 error message 출력
log.error("////////// 예외처리 //////////");
log.error("에러 메시지 : " + ex.getMessage());
// JSP 페이지로 예외를 전달하기 위해 model에 담는다.
model.addAttribute("exception", ex);
// Model 출력
log.error(model);
// JSP로 이동시킨다.
return "error/error_500";
}
}
이 코드에서 눈여겨볼 부분은 @ControllerAdvice, @ExceptionHandler 어노테이션이다.
위 두개의 어노테이션이 없으면 예외처리를 하지 않는다.
2)500 에러 페이지를 위한 error_500.jsp 생성
<error_500.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>500 Error Page</title>
</head>
<body>
<div class="container">
<h1 style="text-align: center">
<strong>에러 페이지</strong>
</h1>
<hr>
<br />
<div class="alert alert-danger">${exception.message }</div>
<ul class="list-group">
<c:forEach items="${exception.stackTrace }" var="stack">
<li class="list-group-item">${stack }</li>
</c:forEach>
</ul>
</div>
</body>
</html>
에러 한 줄당, 박스를 만들기 위해 alert alert-danger를 이용하고
<c:forEach> 문을 이용해 에러 문구를 반복출력하게 만들었다.
예외처리가 잘 되었는지 실험해보기 위해
Mapper.xml에서 쿼리문에 오타를 낸 후 확인해보았다.
다음으로, 404 에러의 예외처리를 진행해본다.
1)web.xml 파일의 <init-param> 태그를 추가해준다.
2)CommonExceptionAdvice 클래스에서 코드를 추가해준다.
<CommonExceptionAdvice>
// 404번 오류
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex) {
log.error("////////// Not Found Page(404) //////////");
log.error("유효하지 않은 페이지");
return "error/error_404";
}
3)404 에러 페이지를 위한 error_404.jsp 생성
<error_404.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>404 Not Found Page</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h1 style="text-align: center">
<strong>404 Not Found Page</strong>
</h1>
<hr>
<br />
<div class="alert alert-danger">페이지가 유효하지 않습니다.</div>
<ul class="list-group">
<li class="list-group-item">404 Error</li>
<li class="list-group-item">주소를 확인 후, 다시 시도 해주세요.</li>
<li class="list-group-item">오류가 계속 되면 담당자에게 연락 해주세요.</li>
<li class="list-group-item">
<div style="text-align:center;"><a href="/" class="btn btn-danger">메인으로 이동</a></div>
</li>
</ul>
</div>
</body>
</html>
404 에러 페이지에는 decorator에 적용한 Bootstrap이 적용되지 않아
jsp 자체에 BootStrap 코드를 적용해주었다.
유효하지 않은 URL로 이동시, 위와 같이 404 에러가 뜨는 것을 확인할 수 있다.
예외처리는 그렇게 어렵지는 않은듯
'BACK-END > SPRING' 카테고리의 다른 글
[Spring]회원 관리 페이지 만들기(회원 리스트, 회원 정보 보기) (0) | 2022.03.16 |
---|---|
[Spring-JS]데이터 변경 시 Confirm이벤트 처리 (0) | 2022.03.15 |
[Spring]회원가입 폼 만들기 (0) | 2022.03.14 |
[Spring]AOP (0) | 2022.03.12 |
[Spring]JUnit을 이용한 단위 테스트 (0) | 2022.03.11 |
댓글