티스토리 뷰
2) 인터셉터를 이용해 Controller 공통 로직 처리하기
- guestbook에다가 인터셉터를 담기 위한 kr.or.connect.guestbook.interceptor 패키지를 만듭니다. 그리고 LogInterceptor.java를 만듭니다. 이 클래스는 HandlerInterceptorAdapter 클래스를 상속받도록 합니다. 그리고 preHandle과 postHandle이라는 메서드를 오버라이딩합니다.
- preHandle이라는 메서드는 Controller 메서드가 실행되기 전에 실행이 되고 postHandle 메서드의 내용은 Controller의 메서드가 실행된 후에 실행되게 됩니다.
- 각각의 메서드에 sysout을 달아 콘솔에 출력할 내용을 입력합니다.
- 인터셉터를 만들면 해당 인터셉터를 등록합니다. config 패키지의 WebMvcContextConfiguration.java에서 해당 인터셉터를 등록하는데 등록하는 방법은 addInterceptors라고 하는 메서드를 오버라이딩해서 아까 만들어놨던 LogInterceptor 객체를 인자에다가 넣어주면 됩니다.
- 실행을 해보면 전에 WebMvcContextConfiguration에 정의했던 addViewControllers 메서드가 있습니다. 해당 메서드는 그냥 /로 요청하게 되면 컨트롤러 없이도 지정된 ViewName으로 화면을 보여주라는 메서드입니다. 스프링이 내부적으로 컨트롤러를 설정해서 해당 메서드를 사용합니다.
- 그래서 인터셉터가 호출되고 메시지가 콘솔에 출력이 됩니다. 해당 부분은 전에 만든 적이 없는 Controller죠. 뭔지는 모르겠지만 어쨌든 해당 객체를 호출을 했다고 합니다. 그리고 index를 view를 사용한다는 메시지를 볼 수 있습니다.
- index.jsp는 list로 redirect하도록 작성되어 있습니다. list는 Controller 중에 GuestbookController가 담당합니다. 그래서 GuestbookController의 list가 호출되면서 메시지가 출력되는 것을 볼 수 있습니다.
실습코드
LogInterceptor.java
package kr.or.connect.guestbook.interceptor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class LogInterceptor extends HandlerInterceptorAdapter{
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(handler.toString() + " 가 종료되었습니다. " + modelAndView.getViewName() + "을 view로 사용합니다."); }
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(handler.toString() + " 를 호출했습니다."); return true; }
} |
생각해보기
- 인터셉터를 이용해 어떤 일들을 공통처리할 수 있을까요? 인터셉터 사용예를 조사해보세요.
참고 자료
[참고링크] Introduction to Spring MVC HandlerInterceptor
http://www.baeldung.com/spring-mvc-handlerinterceptor
[참고링크] Spring MVC Interceptor HandlerInterceptorAdapter, HandlerInterceptor Example - JournalDev
https://www.journaldev.com/2676/spring-mvc-interceptor-example-handlerinterceptor-handlerinterceptoradapter
'부스트코스 웹 프로그래밍 > 5. 웹 앱 개발: 예약서비스 3' 카테고리의 다른 글
7. 아규먼트 리졸버 - BE (2) (0) | 2019.08.10 |
---|---|
7. 아규먼트 리졸버 - BE (1) (0) | 2019.08.10 |
6. 인터셉터 - BE (1) (0) | 2019.08.10 |
5. Spring 에서의 Session 사용법 - BE (0) | 2019.08.10 |
4. 상태유지기술(Cookie & Session) - BE (5) (0) | 2019.08.09 |