program story

서블릿 (Java EE)에서 필터와 리스너의 차이점

inputbox 2020. 10. 23. 07:52
반응형

서블릿 (Java EE)에서 필터와 리스너의 차이점


Servlet에는 필터 및 리스너 기능이 있습니다. Filter와 Listener의 정확한 차이점을 알고 싶습니다.


서블릿 필터는 클라이언트에서 서블릿으로의 요청 및 응답을 모니터링하거나 요청 및 응답을 수정하거나 감사 및 로그에 사용됩니다.

Servlet Listener는 세션을 생성하거나 세션에 속성을 배치 할 때 또는 다른 컨테이너에서 비활성화 및 활성화하는 경우와 같이 웹 컨테이너에서 이벤트를 수신하는 데 사용되며, 이러한 이벤트를 구독하기 web.xml위해 에서 리스너를 구성 할 수 있습니다. HttpSessionListener.


필터는 사전 및 사후 처리 요청에 사용됩니다. javax.servlet.Filtertomcat / 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는 단순히 클라이언트에서 서블릿으로 들어오는 응답과 요청을 필터링하는 것입니다.

리스너 : 트리거가 발생하면 해당 조치를 취하는 트리거와 같습니다.


요컨대

필터는 요청과 응답을 가로채는 서블릿 용입니다.

리스너는 웹 애플리케이션 용으로 컨텍스트 수준, 세션 수준 등의 이벤트에 대한 중요한 작업을 수행합니다.

참고 URL : https://stackoverflow.com/questions/4720942/difference-between-filter-and-listener-in-servlet-java-ee

반응형