스프링 29강 - 예외처리

voilà!·2022년 2월 13일
0

JSP 스프링

목록 보기
29/31
  1. 예외처리란?
  • 프로그램을 처리되는 동안 문제가 발생 시 처리를 중단하고 다른 처리를 하는 것
  • 웹 컨테이너(tomcat)는 기본 오류 페이지를 표시해줌
  • 화면에 서버의 내부 정보가 일반인에게 노출되어 보안이 취약해지고 공격을 받을 수 있으므로, 최대한 개발자가 직접 예외를 처리하여 정의한 오류 페이지를 표시하게 해줘야 한다.
  1. 예외 종류?
  • 시스템 예외
  • 의존 라이브러리에서 발생한 예외
  • 사용자 정의 예외
  • 스프링 프레임워크 예외
  1. 예외 발생 예시?
  • 등록 시 필수여야 하는데 빈 값을 입력하는 유효값 검증 예외
  • 수정화면 생성 시 뷰 파일에서의 예외
  • 삭제 시 매핑 파일에서의 예외
  • 없는 글에 접근 시 예외
  • 없는 URL 요청 시 예외

예시

1. 예외처리 Handler Controller

CommonExceptionHandler.java

package kr.or.ddit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

//스프링 컨트롤러에서 발생된 예외를 처리하는 핸들러 클래스 임을 명시함
@ControllerAdvice
public class CommonExceptionHandler {
	private static final Logger logger = LoggerFactory.getLogger(CommonExceptionHandler.class);
    
    //괄호 안에 설정한 예외타입을 해당 메서드가 처리한다는 것을 의미함
	// <exception-type>java.lang.Exception</exception-type>
	//없는 URL 요청 예외(X)
	//수정화면 생성 시 뷰 파일(jsp)에서 예외(X)
    @ExceptionHandler(Exception.class)
    public String handle(Exception e, Model model) {
    	logger.info(e.toString());
        
        model.addAttribute("exception", e);
        
        //forwarding
        return "error/Exception";
    
    }

}

2. 에러페이지로 보내주는 Controller

ErrorController.java

package kr.or.ddit;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ErrorController {
	@RequestMapping(value = "/error/400")
	public String error400() {
		return "error/400";
	}
	@RequestMapping(value = "/error/404")
	public String error404() {
		return "error/404";
	}
	@RequestMapping(value = "/error/500")
	public String error500() {
		return "error/500";
	}
}

3. JSP

Exception.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>	

<!-- 404 Error Text -->
<div class="text-center">
    <div class="error mx-auto" data-text="Exception">Exception</div>
    <p class="lead text-gray-800 mb-5">
    ${exception.getMessage()}
    </p>
    <ul>
    	<c:forEach var="stack" items="${exception.getStackTrace()}">
    		<li>${stack.toString()}</li>
    	</c:forEach>
    </ul>
    <a href="/lprod/list">&larr;처음으로 이동</a>
</div>

400.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<!-- 404 Error Text -->
<div class="text-center">
    <div class="error mx-auto" data-text="400">400</div>
    <p class="lead text-gray-800 mb-5">Bad Request</p>
    <a href="/lprod/list">&larr;처음으로 이동</a>
</div>

404.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<!-- 404 Error Text -->
<div class="text-center">
    <div class="error mx-auto" data-text="404">404</div>
    <p class="lead text-gray-800 mb-5">Page Not Found</p>
    <a href="/lprod/list">&larr;처음으로 이동</a>
</div>

500.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<!-- 404 Error Text -->
<div class="text-center">
    <div class="error mx-auto" data-text="500">500</div>
    <p class="lead text-gray-800 mb-5">Internal Server Error</p>
    <a href="/lprod/list">&larr;처음으로 이동</a>
</div>

0개의 댓글