서블릿 컨테이너가 관리하는 컴포넌트
=> 서블릿, 필터, 리스너
Filter
// 필터 만들기
// => javax.servlet.Filter 인터페이스 규칙에 따라 작성한다.
//
// 필터 배포하기
// => DD 파일(web.xml)에 설정하기
// <!-- 필터 등록 -->
// <filter>
// <filter-name>f01</filter-name>
// <filter-class>com.eomcs.web.ex02.Filter01</filter-class>
// </filter>
//
// <!-- 필터를 적용할 URL 설정 -->
// <filter-mapping>
// <filter-name>f01</filter-name>
// <url-pattern>/ex02/*</url-pattern>
// </filter-mapping>
// => 애노테이션으로 설정하기
// @WebFilter(URL)
필터의 용도
-> 서블릿을 실행하기 전후에 필요한 작업을 수행
-서블릿 실행전
웹브라우저가 보낸 암호화된 파라미터 값을 서블릿으로 전달하기 전 암호 해체
웹브라우저가 보낸 압축된 데이터를 서블릿으로 전달하기 전 압축 해제
서블릿의 실행을 요청할 권한이 있는지 검사
로그인 사용자인지 검사
로그 남기기
-서블릿 실행후
클라이언트로 보낼 데이터 압축
클라이언트로 보낼 데이터 암호화
*필터의 실행순서는 임의로 조정 불가
필터를 정의할 때 순서에 의존하는 방식으로 프로그래밍 x
Listener
// 리스너 만들기
// => 서블릿 컨테이너 또는 서블릿, 세션 등의 객체 상태가 변경되었을 때 보고 받는 옵저버
// => "Observer" 디자인 패턴이 적용된 것이다.
// => ServletContextListener
// - 서블릿 컨테이너를 시작하거나 종료할 때 보고 받고 싶다면 이 인터페이스를 구현하라.
// => ServletRequestListener
// - 요청이 들어오거나 응답할 때 보고 받고 싶다면 이 인터페이스를 구현하라.
// => HttpSessionListener
// - 세션이 생성되거나 종료될 때 보고 받고 싶다면 이 인터페이스를 구현하라.
// => XxxListener
// - 기타 다양한 인터페이스가 있다. 문서를 참고하라.
//
// 리스너 배포하기
//=> DD 파일(web.xml)에 설정하기
// <listener>
// <listener-class>com.eomcs.web.ex02.Listener01</listener-class>
// </listener>
//
//=> 애노테이션으로 설정하기
// @WebListener
리스너의 용도
서블릿 컨테이너나, 세션 등이 특별한 상태일 때 필요한 작업을 수행
// => ServletContextListener
// - 웹 애플리케이션을 시작할 때 Spring IoC 컨테이너 준비하기
// - 웹 애플리케이션을 시작할 때 DB 커넥션 풀 준비하기
// - 웹 애플리케이션을 종료할 때 DB 커넥션 풀에 들어 있는 모든 연결을 해제하기
// => ServletRequestListener
// - 요청이 들어 올 때 로그 남기기