출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

- preHandle()

컨트롤러가 호출되기 전에 실행된다. handler 파라메터는 핸들러 매핑이 찾아 준 컨트롤러 빈 오브젝트다. 컨트롤러 실행 이전에 처리해야 할 작업이 있다거나, 요청정보를 가공하거나 추가하는 경우에 사용할 수 있다. 또는 요청에 요청에 대한 로그를 남기기 위해 사용하기도 한다. 리턴 값이 true 이면 핸들러 실행 체인의 다음 단계로 진행되지만, false 라면 작업을 중단하고 리턴 하므로 컨트롤러와 남은 인터셉터들은 실행되지 않는다.
– postHandle() 

컨트롤러를 실행하고 난 후에 호출된다. 이 메소드에는 컨트롤러가 돌려준 ModelAndView 타입의 정보가 제공 되서 컨트롤러 작업 결과를 참조하거나 조작할 수 있다.
–afterCompletion() 

이름 그대로 모든 뷰에서 최종 결과를 생성하는 일을 포함한 모든 작업이 모두 완료된 후에 실행된다. 요청처리 중에 사용한 리소스를 반환해주기에 적당한 메소드다.

 

핸들러 인터셉터는 하나 이상을 등록할 수 있다. preHandle() 은 인터셉터가 등록된 순서대로 실행된다. 반면에 postHandle() 과 afterCompletion() 은 preHandle() 이 실행된 순서와 반대로 실행된다.

 

 

 

HandlerInterceptor를 통한 요청 가로채기

 

 

HandlerInterceptor 인터페이스의 구현
– 핸들러 인터셉터는 HandlerInterceptor 인터페이스를 구현해서 만든다. 이 인터페이스를 구현 할 경우 사용하지 않는 메서드도 구현 해주어야 한다.
– 이러한 불편함을 줄여주기 위해 HandlerInterceptorAdaptor 클래스를 제공.
– HandlerInterceptor 인터페이스를 구현해야 하는 클래스는 HandlerInterceptorAdaptor 클래스를 상속 받은 뒤 필요한 메서드만 오버라이딩 하여 사용.

 

 

 

1. HandlerMapping에 HandlerInterceptor 설정 하기

 

 

HandlerInterceptor를 구현 한 뒤에는 <mvc:interceptors> 의 interceptors 프로퍼티를 사용해

HandlerInterceptorAdaptor 를 등록해 주면 된다.

xmlns:mvc가아니라 생략되어 있으므로 <interceptors>로 등록했다.

 

2. HandlerInterceptor 인터페이스의 구현

 

 

 

예외처리

 

 

 

 

@ExceptionHandler 어노테이션을 이용한 처리

 

– AnnotationMethodHandlerExceptionResolver 클래스는 @Controller 어노테이션이 적용된 클래스에서 @ExceptionHandler 어노테이션이 적용된 메서드를 이용해서 예외 처리한다. @ModelAttribute 에서 ExceptionHandler 에서 지정한 예외가 발생하면 @ExceptionHandler가 적용된 메서드를 이용해서 뷰를 지정.

 

 

mypage3에서 강제로 예외를 발생시켜보았다. 에러가 발생시 error/nullpoiner.jsp로 이동한다.

 

 

'spring' 카테고리의 다른 글

[스프링] 웹소켓 : 채팅  (0) 2021.01.29
[스프링] 메일발송하기  (0) 2021.01.25
[스프링] REST API / @RequestBody @ResponseBody , HttpMessageConverter  (0) 2021.01.20
[스프링] mapper / CRUD  (0) 2021.01.15
[스프링] mybatis  (0) 2021.01.12
[스프링] jdbc  (0) 2021.01.11
[스프링] 파일업로드  (0) 2021.01.08

+ Recent posts