Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

보근은 참고 있다

Servlet Filter, Listener 본문

Framework/Spring

Servlet Filter, Listener

보근 2020. 11. 19. 22:57

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Servlet Filter

 

 서블릿은 서블릿 컨테이너에 의해 호출되어 클라이언트의 요청을 직접 전달 받고, 서블릿이 생성한 응답은 클라이언트에게 직접 다시 전달이 된다. 이 과정에서 클라이언트의 요청을 사전 처리하여 서블릿에 전달하고, 서블릿의 응답을 사후 처리하여 클라이언트에 전달할 수 있다. 그 사전 처리와 사후 처리를 하는 것이 필터이다.

 

 보통 필터는 단일 서블릿이 아닌 복수의 서블릿 그룹을 대상으로 만든다. 단일 서블릿에 필터를 적용하고 싶으면 그냥 그 서블릿에 처리를 해버리면 된다.

 

 필터는 체인 형태의 구조로 만약 어떤 서블릿에 필터 A와 B가 순서대로(Web.xml의 순서대로) 구성되어 있다고 할 때, 서블릿 컨테이너로부터 서블릿으로 바로 request를 받는 것이 아니라, 필터 A가 받고 사전 처리를 하고 파라미터인 FilterChain을 통해 다름 필터인 B로 request와 response 객체를 전달해준다. 필터 A로 부터 연결된 필터 B 역시 똑같이 동작하고 마지막 필터인 B가 연결을 해주는 객체는 서블릿에게 간다. 모든 필터에 의해 사전 처리가 된 요청을 받은 서블릿은 응답을 보내고 응답 역시 필터들에 의해 사후 처리 되어 클라이언트에게 전달된다. 

 

 필터는 서블릿이 아니라 HttpServlet을 상속받지 않고, javax.servlet.Filter 인터페이스를 구현하여 사용한다. Filter의 구현 메소드는 init(), doFilter(), destroy()가 있다.

 

 필터를 사용하는 예시로는 전체 서블릿에 한글을 인코딩 해줘야 할 때나, http처럼 보안이 없는 프로토콜을 사용할 때 암호화가 필요한 경우 등이 있다.

 

 

 

 

 

 

 

 

 

Servlet Listener

 

 리스너는 웹 애플리케이션의 주요 이벤트를 추적하는 기능이 있다. 그 기능을 통해 이벤트 상태에 따라 보다 효율적인 자원의 관리나 자동화 된 처리를 한다. 여기서 이벤트란 요청과 응답, 입출력 등도 있고, 웹 애플리케이션의 시작, 종료, 객체의 생성, 소멸 등이 될 수 있다.

 

 이벤트에는 두 가지 수준의 서블릿 이벤트가 있다. 서블릿 컨텍스트 수준의 이벤트와 http 세션 수준의 이벤트이다. 그리고 각각은 라이프 사이클 변경과 애트리뷰트 변경으로 나눌 수 있다.

 

이벤트 카테고리 이벤트 정의 자바 인터페이스
서블릿 컨텍스트
라이프 사이클 변경
- 서블릿 컨텍스트의 초기화 후
- 서블릿 컨텍스트의 종료 직전
javax.servlet.ServletContextListener
서블릿 컨텍스트
애트리뷰트 변경
- 서블릿 컨텍스트 애트리뷰트 추가
- 서블릿 컨텍스트 애트리뷰트 삭제
- 서블릿 컨텍스트 애트리뷰트 교체
javax.servlet.ServletContextAttributeListener
Http 세션
라이프 사이클 변경
- 세션 생성
- 세션 검증
- 세션 중단
javax.servlet.http.HttpSessionListener
Http 세션
애트리뷰트 변경
- 세션 애트리뷰트 추가
- 세션 애트리뷰트 삭제
- 세션 애트리뷰트 교체
javax.servlet.http.HttpSessionAttributeListener

 

 

 리스너 역시 Web.xml에 등록한다. 애플리케이션 시작 후 첫 번째 요청이 수행되기 전에 해당되는 리스너의 인스턴스를 만들어 등록한다. 각각의 이벤트들이 실행될 때 해당되는 리스너들을 선언된 순서대로 등록한다. 그 후 응용 프로그램이 실행될 때 각각의 이벤트에 해당하는 리스너들이 등록된 순서대로 동작한다. 모든 리스너들은 마지막 요청이 동작할 때까지 활성화된 상태로 유지한다. 응용 프로그램이 종료 시에 세션 리스너는 선언의 역순으로 먼저 알림을 받고, 그 뒤에 서블릿 컨텍스트 리스너가 선언의 역순으로 알림을 받고 종료된다.

 

 

 

 

 

 

 

 

 

 

 

 

서블릿 필터, 리스너 개략적인 구조

 

 

 

 

 

 

 

 

'Framework > Spring' 카테고리의 다른 글

Servlet  (0) 2020.11.14
웹 서버, 웹 애플리케이션 서버.  (0) 2020.11.14
Comments