[servlet] 리스너 & 필터
리스너
- 컨테이너에서 발생하는 이벤트를 모니터링하다가 특정 이벤트가 발생하면 실행되는 특수한 서블릿
- 웹애플리케이션 실행에 필요한 정보를 제공하거나 톰캣 시작/종료와 같은 특정 상황에 자동으로 동작하는 프로그램을 구현할 때 사용
- 애너테이션 기반 코드로 작성
- 특정 이벤트에 따라 동작하는 인터페이스를 구현한 클래스
- 리스너의 동작 구조
기본적으로 생명 주기 변화와 Scope Object에서 관리하는 속성의 변화를 모니터링하고 해당 이벤트가 발생하면 실행되는 구조 ex) ServletContext
- 리스너의 대표적인 유형
초기화 매개변수와 연동
예제 프로그램 등을 배포할 때 샘플 데이터 제공
복잡한 환경 설정 제공
특정 이벤트에 동작하는 기능 구현
- 리스너의 종류
- 리스너를 구현하기 위해서는 리스너 인터페이스를 구현한 클래스를 만들어야 한다.
애너테이션을 이용해 리스너임을 명시한 다음 오버라이딩된 메서드 중 필요한 부분의 코드를 작성
필터
- 리스너와 마찬가지로 웹 애플리케이션을 지원하기 위한 특수한 형태의 서블릿
- 클라이언트 요청에 따라 서블릿이나 JSP가 실행되기 전에 resp 혹은 req 객체의 조작이나 추가적인 처리를 할 수 있음
- 특정 요청에만 동작하며, 여러개ㅔ의 필터가 정해지 순서에 따라 클라이언트 요청 처리 이전에 먼저 실행됨
- 필터가 대표적으로 활용되는 분야
인증, 로깅(특정 페이지 및 기능 모니터링), 국제화(다국어 처리), 한글 인코딩 처리 등
- 필터의 적용은 각 필터의 doFilter() 메서드의 내용이 수행되는 것으로, ServletRequest와 ServletResponse의 내용을 가로채 필요한 작업을 수행하고 다음 필터로 전달하거나, 요청한 서블릿으로 이동하는 구조
- javax.servlet.Filter 인터페이스를 구현하는 클래스 생성 및 @WebFilter애너테이션을 사용하여 필터임을 알리고 필터 요청을 위한 url 매침 정보를 인자로 추가해주어야 한다.
- 필터의 순서를 지정하기 위해서는 web.xml파일에 필터를 등록해야 한다. 이 경우 @WebFilter에는 url 매핑 대신 filterName 속성이 들어가야 한다.