- 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 |