2022 01 29 - oneso123456789/2022 GitHub Wiki

other

post get 방식 나누는 방법은 가장 쉬운게 보이는것은 get 안보이는것은 post로 한다

Controller의 Exception처리

Controller를 작성할 때 예외 상황을 고려하면 처리해야 하는 작업이 엄청나게 늘어날 수 밖에 없음
스프링 MVC에서는 이러한 작업을 다음과 같은 방식으로 처리할 수 있음

  • @ExceptionHandler와 @ControllerAdvice를 이용한 처리
  • @ResponseEntity를 이용하는 예외 메시지 구성

@ControllerAdvice

@ControllerAdvice는 뒤에서 배우게 되는 AOP(Aspect-Oriented-Programming)를 이용하는 방식임

AOP란

간단히 말하면 핵심적인 로직은 아니지만 프로그램에서 필요한 '공통적인 관심사(cross-concern)는 분리하자`
라는 개념임 Controller를 작성할 때는 메서드의 모든 예외사항을 전부 핸들링해야 한다면 중복적이고 많은 양의 코드를
작성해야하지만, AOP방식을 이용하면 공통적인 예외사항에 대해서는 별도로
@ControllerAdvice를 이용해서 분리하는 방식임

com.crow.exception 패키지 생성, CommonExceptionAdvice 클래스 생성

CommonExceptionAdvice 클래스는 @ControllerAdvice 어노테이션을 적용하지만 예외 처리를 목적으로 생성하는 클래스이므로 별도의 로직을 처리하지 않음
@ControllerAdvice: 해당 객체가 스프링의 컨트롤러에서 발생하는 예외를
처리하는 존재임을 명시하는 용도로 사용함

@ExceptionHandler: 해당 메서드가 ()에 들어가는 예외 타입을 처리한다는 것을 의미함
@ExceptionHandler 어노테이션의 속성으로는 Exception 클래스 타입을 지정할 수 있음 이 코드는 Exception.class를 지정하였으므로
모든 예외에 대한 처리가 except()만을 이용해서 처리할 수 있음

만일 특정한 타입의 예외를 다루고 싶다면 Exception.class 대신에
구체적인 예외 클래스를 지정해야함
JSP 화면에서도 구체적인 메시지를 보고 싶다면 Model을 이용해서
전달하는 것이 좋음
com.crow.exception 패키지는 servlet-context.xml에서 인식하지 않기
때문에 을 이용해서 com.crow.exception 패키지 등록
<context:component-scan base-package="com.crow.exception"/>

CommonExceptionAdvice의 except()의 리턴값은 문자열이므로 JSP파일의
경로가 됨 JSP는 error_page.jsp 이므로 WEB-INF/views 폴더 내에 작성해야함

error_page.jsp 작성

taglib를 이용해 jstl 라이브러리를 이용함
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
html 버전도 4.01로 바꿔줌, meta태그 쪽에 인코딩역시 해줌
http-equiv content 속성사용
보디에 아까 선언해준 jstl라이브러리를 이용해서 오류메시지를 가져옴
<c:out value="${exception.getMessage()} }"></c:out>
ul 태그로 목록을 만들어줌 이때 forEach를 돌려줌 itmes는
exception.getStackTrace()로 지금까지 어떤 함수들을 거쳐왔는지 추척한 후 li태그로 스택을 하나씩 가져와서 내용을 입력함

예외 메시지가 정상적으로 출력되었는지 확인하려면 고의로 숫자나 날짜등의
파라미터 값을 변환에 문제 있게 만들어서 호출해 볼 수 있음
EX: sample/ex04?name=aaa&age=bbb

⚠️ **GitHub.com Fallback** ⚠️