프로그래밍/Spring

Spring 4일차 - 예외처리

윤도ri 2022. 3. 24. 15:18

 스프링 없이 개발했을때 우리는 컨트롤러에서 예외가 발생했을때 매번 try catch문으로 예외처리를 해주었다. 그렇지만 스프링에서는 이 불편함을 스프링을 이용하여 한꺼번에 처리할 수 있다. 

 스프링에서는 @ExceptionHandler 와 @ControllerAdvice 를 이용해서 처리하게 된다.

 

| @ControllerAdvice

  말 그대로 컨트롤러에서 예외가 발생했을때 충고해 주는 곳이다. 해당 객체가 스프링의 컨트롤러에서 발생시키는 예외 처리하는 존재임을 명시해준다. (= 예외처리 여기로 다 모여~)

 예외 사항을 전부 핸들링해야 한다면 중복적이고 많은 양의 코드를 작성해야 한다. 따라서 공통적인 에외사항에 대해서는 별도로 @ControllerAdvice를 이용해서 분리한다 따로 예외들만 분리해서 관리할 수 있게되고 이것이 AOP를 이용하는 방식이다.

 

| @Exceptionhandler()

 특정 예외가 발생했을때 이곳으로 와 라고 말해주는 존재.

  1)Exceptionhandler(Exception.class)

   : Exception에서 예외 발생하면 여기로 와라 (최상위 객체라 모든 예외는 이곳으로 온다) 

  2)Exceptionhandler(NoHandlerFoundException.class)

   : 페이지를 찾을 수 없을 경우 여기로 와라 

 


<예제1 : 전체 예외처리 >

1.새로운 패키지 com.koreait.exception을 만들고 그 안에 CommonExceptionAdvice.java 만들기. 

2.메소드로 예외를 받아와서 error_page로 이동하게 한다.

3.root-context.xml 에 관리해야할 패키지를 적어준다.

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

예외가 발생하게 되면 해당 예외 필드가 메모리에 할당된다. * 할당된 예외필드의 주소값을 받을 객체가 필요하므로 매개변수에 Exception타입의 e객체를 선언해놓는다.
백신 프로그램 광고까지 넣어준다 ㅋㅋ
결과물,, 너무나도 위험해보인다,,

 

<예제2: 페이지 찾을 수 없음 404 오류 예외처리>

1.CommonExceptionAdvice.java 에 메소드 추가하기.

2.어노테이션 @ExceptionHandler 추가 (이때는 NoHandlerFoundException 객체가 필요하다) 

3.응답 상태를 not found 상태로 해주어야 한다.

4.스프링의 모든 요청은 dispatcherservlet 을 이용해서 처리되므로 404에러를 같이 처리 할 수있도록 

  관련 코드를 web.xml 에 적어주어야 한다.

5.404page로 이동하여 원하는 메세지 적기

web-xml 에 추가해주기.
404_page.jsp
ex01/sample/ 뒤에 아무거나 적었을때 url이 존재하지 않는다는 메세지 결과를 볼 수 있다.