컨트롤러의 메소드 = request handler
그 request handler가 호출되기 전에 수행되는것이 prehandle (front controller와 controller 사이)
model data, view의 이름을 반환하고, view가 호출되기 전에 수행되는 것이 posthandle. (front controller와 view 사이)
응답이 view까지 모두 수행되고, 응답문서가 나간 후에 수행되는 것이aftercompletion
preHandle은 request, response, handler 객체를 매개변수로 받음.
handler=우리가 만든 컨트롤러의 메소드.(mapping 된대로 req를 처리할 메소드)
즉, 어떤 클래스에 있는지도 정보를 넘겨줌.
postHandle은 request, response handler + modelAndView(컨트롤러가 반환하는 것. 비즈니스 로직의 처리 결과)를 매개변수로 받음.
무조건 공통으로 추가적으로 넣어야 할 데이터가 있을 때.
afterCompletion은 request, response, handler + exception.
만약 핸들러(컨트롤러의 메소드)에서 예외가 발생한다면 예외처리 할 수 있도록
예외객체를 던져줌.
컨트롤러에서 예외가 발생하면 예외처리도 @exceptionHandler 를 이용해
예외처리용 핸들러를 만들었는데,
interceptor에서 예외처리를 할 수도 있다.
무조건 세개를 구현할 필요가 없을 수도 있다.
따라서 HandlerInterceptor 인터페이스에 위 세개 메소드가 default method로 들어감. (abstract가 아님)
필요한 것만 overriding 해서 사용한다.
servlet과 동일한 req, res를 매개변수로 받기때문에, 세 메소드에서 모두 서블릿에서 할 수 있는 모든 동작을 수행할 수 있다.