서블릿, 필터, 리스너, 인터셉터 간의 차이 및 연결
1. 개념
1. Servlet : Servlet은 플랫폼 및 프로토콜 독립적 인 기능을 갖춘 서버 측을 실행하는 Java 응용 프로그램이며 클라이언트 요청과 서버 응답 사이의 중간 계층에서 작동하는 웹 페이지를 동적으로 생성 할 수 있습니다.
2. 필터 : 필터는 HTTP 요청, 응답 및 헤더 정보를 변환하는 데 사용할 수있는 재사용 가능한 코드 스 니펫입니다. 필터는 서블릿과 같지 않습니다. 요청이나 응답을 생성 할 수 없습니다. 특정 리소스에 대한 요청을 수정하거나 특정 리소스의 응답을 수정합니다.
3. 리스너 : 듣는 사람, 말 그대로, 청취자는 주로 듣는 데만 사용된다는 것을 알 수 있습니다. 리스너를 통해 웹 서버에서 실행 조치를 듣고 요구 사항에 따라 해당 응답을 할 수 있습니다.
간단히 말해서, 응용 프로그램, 세션 및 요청의 세 객체가 생성되거나 수정 및 제거 속성이 추가 될 때 코드를 자동으로 실행하는 기능 구성 요소입니다.
4. 인터셉터 : 접선 방향으로 프로그래밍하는데, 이는 서비스 나 메소드 전에 메소드를 호출하거나 메소드 후 메소드를 호출하는 것입니다.
예를 들어, Dynamic Proxy는 인터셉터의 간단한 구현입니다. 메소드를 호출하거나 다른 비즈니스 로직 작업을 수행하기 전에 문자열을 인쇄하거나 메소드를 호출 한 후 문자열을 인쇄하거나 예외를 던질 때 비즈니스 로직 작업을 수행 할 수도 있습니다.
5. 서블릿, 필터, 리스너는 web.xml로 구성되며 인터셉터는 web.xml로 구성되지 않으며 Struts interceptor는 struts.xml로 구성됩니다. 스프링의 인터셉터는 Spring.xml로 구성됩니다.
2.로드 순서
web.xml의로드 순서는 : Context -Param-> 리스너 -> 필터 -> 서블릿입니다.
3. 책임
1. 서비스 :
(1) 클라이언트 요청의 특성에 따라 동적 컨텐츠가 포함 된 전체 HTML 페이지를 작성하고 반환합니다.
(2) 기존 HTML 페이지에 포함될 수있는 HTML 페이지 (HTML Fragment)의 일부를 만듭니다.
(3) 클라이언트가 보낸 숨겨진 데이터를 읽습니다
(4) 클라이언트가 보낸 디스플레이 데이터를 읽으십시오
(5) 다른 서버 리소스 (데이터베이스 및 Java 응용 프로그램 포함)와 통신
(6) 상태 코드 및 응답 헤더를 통해 숨겨진 데이터를 클라이언트에 보냅니다.
2. 필터 :
(1) 필터는 요청이 서블릿에 도달하기 전에 사용자 요청을 전처리하거나 서블릿을 떠날 때 HTTP 응답을 처리 할 수 있습니다.
(2) 서블릿을 실행하기 전에 먼저 필터 프로그램을 실행하고 전처리 작업을 수행하십시오.
(3) 프로그램 요구에 따라 요청 및 응답 수정
(4) 서블릿이 호출 된 후 서블릿의 실행을 가로 채 웁니다.
3. 목록 :
8 리스너 인터페이스는 Servlet2.4 사양에 제공되며 다음과 같이 세 가지 범주로 나눌 수 있습니다.
(1) ServletContext와 관련된 LESTNE R 인터페이스. 포함 : ServletContextListener, ServletContextAttRiptipListener
(2) httpsession과 관련된 Listner 인터페이스. 포함 : httpsessionListner, httpsessionAttributeListener, httpsessionBindingListener, httpsessionActivationListener
(3) ServletRequestListner, ServletRequestAttributeListener를 포함하여 ServletRequest와 관련된 리스너 인터페이스
4. 차이
1. 서비스 : 서블릿 프로세스는 짧습니다. URL이 전송되면 처리 된 다음 귀하가 지정한 페이지로 반환하거나 반환합니다. 비즈니스 처리 전에 주로 제어하는 데 사용됩니다.
2. 필터 : 프로세스가 나사화됩니다. URL이 전송 된 후 확인 후 원래 프로세스를 아래쪽으로 유지하고 다음 필터, 서블릿 등으로 수신 할 수 있으며 서블릿이 처리 된 후에는 계속 아래로 전달되지 않습니다.
필터 기능은 프로세스를 원래 방식으로 유지하거나 프로세스를 지배하는 데 사용될 수 있으며, 서블릿 함수는 주로 프로세스를 지배하는 데 사용됩니다. 필터는 서블릿 (소프트 와이프)에 대한 보충제로 간주 될 수 있습니다.
필터는 서블릿의 "변형"으로 간주 될 수 있습니다. 주로 사용자 요청을 전처리하는 데 사용되며 httpservletresponse 후 프로세스도 사용할 수도 있습니다. 전형적인 처리 체인입니다.
그것과 서블릿의 차이점은 사용자에게 직접 응답을 생성 할 수 없다는 것입니다.
완전한 프로세스는 다음과 같습니다. 필터 프리 프로세스 사용자 요청을 한 다음, 요청을 서비스에 처리하고 응답을 생성하고 마지막으로 서버 응답을 필터링합니다.
3. 일치하는 규칙
요청이 서블릿 컨테이너로 전송되면 컨테이너는 먼저 서블릿 매핑 URL로 요청 된 URL을 현재 응용 프로그램 컨텍스트 경로로 빼게됩니다. 예를 들어, http : //localhost/test/aaa.html을 방문하고 있습니다 (내 응용 프로그램 컨텍스트는 테스트).
컨테이너는 http : // localhost/tes를 제거하고 나머지 /aaa.html 부분을 사용하여 서블릿 매핑과 일치합니다.
참고 :이 매핑 매칭 프로세스에 대한 특정 규칙이 있으며 각 경기는 결국 하나의 서블릿 만 일치합니다. (이것은 필터와 다릅니다)
서틀 매칭 규칙 : 서블릿이 성공적으로 일치하면 더 이상 일치하지 않습니다.
정확한 경로 일치 :
예 : 예를 들어, Servleta의 URL 패턴은 /테스트이며 ServletB의 URL 패턴은 /*입니다. 현재 URL이 액세스하는 것이 http : // localhost/test,
현재 컨테이너는 먼저 정확한 경로 일치를 수행하고 /테스트가 Servleta와 정확히 일치한다는 것을 알게되므로 Servleta에 전화하여 다른 서블릿에주의를 기울이지 않습니다.
가장 긴 길의 일치 :
예 : Servleta의 URL 패턴은/test/*이며 ServletB의 URL 패턴은/test/a/*입니다. http : // localhost/test/a에 액세스 할 때
컨테이너는 가장 긴 경로가있는 서블릿을 선택합니다.
확장 일치 : URL의 마지막 세그먼트에 확장이 포함 된 경우 컨테이너는 확장자를 기반으로 적절한 서블릿을 선택합니다.
예 : Servleta의 URL 패턴 : *.Action
4. 서블릿과 필터는 모두 URL 등을 대상으로하며, 청취자는 세션 생성 및 세션의 발생과 같은 객체를 대상으로합니다.
Spring은 Struts를 통합하고 Struts의 동작에 속성을 주입하고 웹 응용 프로그램 타이밍 작업, 온라인 사용자 수에 대한 통계 등을 구현합니다.
5. 필터와 유사하지만 web.xml이 아니라 URL이 아니라 조치를 위해 struts.xml로 구성됩니다. 페이지가 작업을 제출하면
필터링 작업 수행은 Struts1.x가 제공하는 플러그인 메커니즘과 같습니다. 전자는 struts1.x가 제공하는 필터로 간주 될 수 있으며 인터셉터는 struts2에서 제공하는 필터입니다.
필터의 차이 :
(1) web.xml에서 구성되지는 않지만 struts.xml로 구성되어 있으며 조치가 포함되어 있습니다 (2) 작업 자체는 수신하기 전에 작업을 수행 할 수있는 인터셉터를 지정할 수 있습니다.
6. Struts2의 필터와 인터셉터의 차이와 연결 :
(1) 인터셉터는 struts2에 의해 제공되며 필터는 서블릿 표준에 의해 제공됩니다.
(2) 인터셉터는 목표 동작의 대상 방법을 가로 채고 필터는 다양한 웹 리소스를 대상으로합니다.
(3) 인터셉터는 struts.xml로 구성되며 필터는 web.xml 파일에서 구성됩니다.
(4) 인터셉터는 인터셉터 스택을 사용하여 함께 구성되는 반면, 필터는 인터셉트 된 자원에 따라 함께 연결됩니다. 실행 순서는 구성 파일의 위치에 따라 결정됩니다.
(5) 인터셉터는 Java 반사 메커니즘을 기반으로하며 필터는 기능 콜백을 기반으로합니다.
(6) 필터는 서블릿 컨테이너에 의존하지만 인터셉터는 서블릿 컨테이너에 의존하지 않습니다.
(7) 인터셉터는 작업 요청에 대해서만 작동 할 수 있지만 필터는 거의 모든 요청에서 작동 할 수 있습니다.
(8) 인터셉터는 동작 컨텍스트 및 값 스택에서 객체에 액세스 할 수 있지만 필터는 할 수 없습니다.
(9) 동작 수명주기 동안 인터셉터를 여러 번 호출 할 수 있으며, 컨테이너가 초기화 될 때 필터는 한 번만 호출 할 수 있습니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!