서블릿 (Java EE)에서 필터와 리스너의 차이점
Servlet에는 필터 및 리스너 기능이 있습니다. Filter와 Listener의 정확한 차이점을 알고 싶습니다.
서블릿 필터는 클라이언트에서 서블릿으로의 요청 및 응답을 모니터링하거나 요청 및 응답을 수정하거나 감사 및 로그에 사용됩니다.
Servlet Listener는 세션을 생성하거나 세션에 속성을 배치 할 때 또는 다른 컨테이너에서 비활성화 및 활성화하는 경우와 같이 웹 컨테이너에서 이벤트를 수신하는 데 사용되며, 이러한 이벤트를 구독하기 web.xml
위해 에서 리스너를 구성 할 수 있습니다. 예 HttpSessionListener
.
필터는 사전 및 사후 처리 요청에 사용됩니다. javax.servlet.Filter
tomcat / jboss / other 컨테이너 javadoc을 살펴보십시오 .
리스너가 앱 서버의 이벤트에 연결할 수있는 트리거와 같은 경우 (여기서는 컨테이너라는 용어를 사용하겠습니다). 리스너를 사용하면 애플리케이션 수준, 세션 수준, 수명주기 변경, 속성 변경 등을 추적 할 수 있습니다. 구현 된 인터페이스는 javax.servlet.Listener
인터페이스입니다.
아래 @fnt의 답변을 바탕으로 좀 더 명확히하겠습니다. 리스너는 클라이언트 요청이 들어오지 않아도 수명주기 변경을 대상으로합니다. 따라서 하나의 클라이언트 요청에 대해 요청이 처리되기 전에 더 많은 수명주기 이벤트가 발생할 수 있습니다. 예 : 시간 초과 된 모든 세션을 기록하려고합니다. SesionTimeout은 사용자가 아무것도하지 않아도 발생할 수있는 수명주기 이벤트입니다. 이러한 시나리오의 경우 청취자가 적절할 것입니다.
요청이 도착했을 때 로깅 문제. 새 요청을 동등한 리스너 (수명주기 이벤트 읽기) 이벤트에 직접 매핑하지 않습니다. 따라서 들어오는 각 요청에 대해 무언가를 기록하려면 필터를 사용하는 것이 옳습니다.
오라클의이 자료는 더 많은 필터 및 리스너 를 명확히 할 수 있어야합니다.
HTH
필터 는 들어오는 (요청) 값과 나가는 (응답) 값이 필터링되는 정수 필터와 같습니다.
청취자 는 청취 (트리거)와 같습니다. 필요할 때마다 수행됩니다.
한 가지 중요한 차이점은 종종 간과됩니다. 리스너는 실제 물리적 요청에 대해 트리거되지만 필터는 서블릿 컨테이너 디스패치와 함께 작동합니다. 하나의 리스너 호출에 대해 여러 필터 / 서블릿 호출이있을 수 있습니다.
매핑은 디스패처 유형을 필터링합니다 . 링크는 약간 날짜가 있습니다-Servlet 3.0 Async
디스패처 유형을 포함하지 않습니다 . @WebFilter
주석으로 디스패처 유형을 지정할 수도 있습니다 .
import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;
@WebFilter(servletNames = { "My Servlet" },
dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD })
Java EE 6의 텍스트
필터
필터는 요청 및 응답 (헤더 및 콘텐츠)을 변환하는 개체입니다.
청취자
라이프 사이클 이벤트가 발생할 때 메소드가 호출되는 리스너 객체를 정의하여 서블릿 라이프 사이클의 이벤트를 모니터링하고 반응 할 수 있습니다.
모든 답변과 블로그를 읽은 후 이것이 내가 얻은 것입니다.
필터
필터는 요청 및 응답을 동적으로 가로 채서 요청 또는 응답에 포함 된 정보를 변환하거나 사용하는 개체입니다.
필터는 일반적으로 자체적으로 응답을 생성하지 않고 대신 모든 유형의 서블릿 또는 JSP 페이지에 "연결"될 수있는 범용 기능을 제공합니다.
필터는 뷰를 렌더링하기 전에 실행되지만 컨트롤러가 응답을 렌더링 한 후에 실행됩니다.
필터는 web.xml에 정의 된 대로만 웹 레이어에서 사용됩니다.
요청 / 응답을 블랙 박스 시스템으로 처리 할 때 필터가 더 적합합니다. 서블릿이 구현되는 방식에 관계없이 작동합니다.
필터는 로그인 인증, 웹 페이지에서 들어오는 요청 감사, 변환, 로깅, 압축, 암호화 및 암호 해독, 입력 유효성 검사 등과 같은 필터링 작업을 수행하는 데 사용됩니다.
서블릿 필터는 웹 계층에서만 사용되며 웹 컨텍스트 외부에서는 사용할 수 없습니다.
필터에 대한 자세한 내용은 http://array151.com/blog/servlet-filter/
경청자
Servlet Listener는 세션을 만들거나 세션에 속성을 배치 할 때 또는 다른 컨테이너에서 비활성화 및 활성화하는 경우와 같이 웹 컨테이너에서 이벤트를 수신하는 데 사용되며 이러한 이벤트를 구독하려면 web.xml에서 리스너를 구성 할 수 있습니다. 예를 들어, HttpSessionListener입니다.
리스너는 앱 서버의 이벤트에 연결할 수있는 실제 물리적 요청에 대해 트리거됩니다. 리스너를 사용하면 애플리케이션 수준, 세션 수준, 수명주기 변경, 속성 변경 등을 추적 할 수 있습니다.
라이프 사이클 이벤트가 발생할 때 메소드가 호출되는 리스너 객체를 정의하여 서블릿 라이프 사이클의 이벤트를 모니터링하고 반응 할 수 있습니다.
자세한 내용 : http://array151.com/blog/servlet-listener/
그리고 여기에 차이점이 있습니다 http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/
리스너 내에서 현재 이벤트 객체를 수정할 수 있지만 리스너에서 현재 이벤트 핸들러의 실행을 중지 할 수는 없습니다. 또한 리스너 내에서 이벤트 큐를 지울 수 없습니다. 기능에 부과 된 차이 외에도 다른 목적을위한 것입니다. 리스너는 이벤트 핸들러와 모델 간의 상호 작용에 초점을 맞추는 반면 필터는 이벤트 핸들러와 컨트롤러 간의 상호 작용에 초점을 맞추는 경향이 있습니다.
출처 : 웹
이 둘의 영어 의미로 쉽게 대략적인 아이디어를 가질 수 있습니다. 필터는 서블릿에서 들어오고 나가는 콘텐츠 / 리소스를 필터링하기 위해 있습니다. 반면에 Listener는 웹 애플리케이션에 어떤 일이 발생했을 때 (듣기) 관련 작업을 수행하기 위해 거기에 있습니다.
Filter : Filter는 단순히 클라이언트에서 서블릿으로 들어오는 응답과 요청을 필터링하는 것입니다.
리스너 : 트리거가 발생하면 해당 조치를 취하는 트리거와 같습니다.
요컨대
필터는 요청과 응답을 가로채는 서블릿 용입니다.
리스너는 웹 애플리케이션 용으로 컨텍스트 수준, 세션 수준 등의 이벤트에 대한 중요한 작업을 수행합니다.
'program story' 카테고리의 다른 글
Python에서 키보드 이벤트를 생성하는 방법은 무엇입니까? (0) | 2020.10.23 |
---|---|
id가 시작하는 html 요소 찾기 (0) | 2020.10.23 |
Rails 4 기본 범위 (0) | 2020.10.23 |
IntelliJ / Android Studio의 한 파일에 대한 잘못된 파일 연결 (0) | 2020.10.23 |
비밀번호없이 업데이트 사용자 고안 (0) | 2020.10.23 |