자바 필터란 무엇입니까! 그것의 기능과 역할은 무엇입니까?
Filter 기술은 서블릿 2.3 의 새로운 기능입니다. 서블릿 2.3 은 sun 과 2000 년 10 월에 발표된 것으로, sun 이 주장하는 코드 개방의 원칙을 잘 보여주는 많은 개인과 회사 커뮤니티를 포함하고 있습니다. 많은 참가자의 * * * 때문에
2. 새로운 인터내셔널리제이션
3. 클래스의 마운트 규칙을 명확히했습니다.
4. 새로운 오류 및 보안 속성
5. HttpUtils 클래스 사용에 찬성하지 않습니다.
6. 다양한 유용한 방법
7. 여러 서블릿 dtd 를 설명하고 확장합니다.
8. filter 기능.
가장 중요한 것은 filter 기능입니다. request 를 변경하고 response. Filter 를 서브렛이 아닌 것으로 수정할 수 있습니다 서블릿을 떠날 때 response 를 처리할 수도 있습니다. 즉, filter 는 실제로 "servlet chaining" 입니다. filter 에는
1 > 이 포함됩니다
2. 서브렛이 호출되기 전에 서브렛 요청을 확인합니다.
3. 요청 헤더 및 요청 데이터를 필요에 따라 수정합니다.
4. 필요에 따라 response 헤더 및 response 데이터를 수정합니다.
5. 서블릿이 호출 된 후 가로채기.
하나 이상의 서블릿에 파일러를 구성할 수 있습니다. 단일 서블릿 또는 서블릿 그룹은 여러 파일러에서 사용할 수 있습니다. 몇 가지 유용한 파일러로는 사용자가 파일러 인식, 로그 파일러, 감사 파일러, 암호화 파일러, 기호 파일러 등이 있습니다. Xml 내용을 변경할 수 있는 XSLT filter 등.
filter 는 javax.servlet.Filter 인터페이스를 구현하고
1. voidset 의 세 가지 메서드를 정의해야 합니다
2. filterconfig getfilterconfig ()//filter 의 구성 객체를 반환합니다.
3. void do filter (servlet request req, ServletResponse RES, FilterChain chain) // filter 작업 수행 DoFilter 메소드를 여러 번 호출하여 다른 요청을 처리합니다. FilterConfig 인터페이스에는 필터 이름 및 초기화 매개변수 정보를 찾을 수 있는 메서드가 있습니다. 서버는 FilterConfig 를 비워 두어 파일러가 종료되었음을 나타낼 수 있습니다.
각 파일러가 doFilter 에서 나옵니다
Est 와 response. 이 방법에서는 요청 및 response 에 대한 모든 작업을 수행할 수 있습니다. (데이터 수집 포함) 포장 데이터 등). filter 는 chain.doFilter () 메서드를 호출하여 다음 filter 에 제어권을 부여합니다. filter 는 doFilter () 메서드에서 끝납니다. filter 가 request 처리를 중단하고 response 에 대한 다음 Filter 를 호출하지 않아도 됩니다.
필터는 요청 또는 response 를 래핑하여 여러 가지 방법을 변경하고 사용자 정의 속성을 제공할 수 있습니다 Api2.3 은 HttpServletRequestWrapper 및 HttpServletResponseWrapper 를 제공합니다. 개 메소드의 등록 정보는 wapper 및 rewrite 메소드를 상속해야 합니다. 다음은 간단한 로그 파일러가 모든 요청 기간을 기록하는 데 사용하는 기간입니다 ..
public class log filter implements filter {
public void set filter config (filter config config) {
this.config = config >
}
public filter config getfilter config () {
return config;
}
public void do filter (서블릿 요청,
서블릿 response
longbef = system.currenttimemillis ();
chain.doFilter(req, RES); //no chain parameter needed here
longaft = system.currenttimemillis ();
context.log ("요청 대상"+요청.getrequest uri ()
+":"+
}
}
서버가 setFilterConfig () 를 호출할 때 filter 는 config 정보를 저장합니다. do fig 에 Filtergt;;
lt; 필터-이름 gt;
log //filter 이름
lt; //filter-namegt;;
lt; 필터-클래스 gt;
로그 필터//필터
클래스 (위 예의 서블릿)
lt; /filter-classgt;
lt; /filtergt;
lt; Filter-mappinggt;;
lt; 필터-이름 gt; Loglt;; //filter-namegt;;
lt; Servletnamegt;; 서블릿 name lt; //servlet-namegt;;
lt; /filter-매핑 gt;
lt; 서브렛 gt;
lt; 서블릿-이름 gt; 서블릿 name lt; /servletname gt;
lt; Servletclassgt;; Servletclasslt;; /서블릿-classgt;
lt; /서브렛 gt;
lt; 서브렛-매핑 gt;
lt; 서블릿-이름 gt; 서블릿 name lt; //servlet-namegt;;
lt; Url-patterngt;; * lt; //url-patterngt;;
lt; /서블릿-매핑 gt;
이 웹.xml 을 web-inf 에 넣습니다 (자세한 내용은 Tomcat 도움말 문서 참조).
한 번에 하나의 request 를 요청할 때 (예: index.jsp) 그런 다음 해당 서블릿으로 이동합니다. 간단한 서블릿 (출력 문이 없는 페이지) 인 경우 가능한 출력은
request to/index.jsp: 10 < 입니다 핀도 COM 어셈블리입니다. Filter 파일의 확장자는. ax 이지만. dll 일 수도 있습니다. Filter 는 Input pin 또는 Output pin 이 포함된 경우 (또는 Filter Graph 의 위치) 에 따라 Source Filter (Output pin 만 해당), Transform Filter (inins 도 포함) 의 세 가지 범주로 나눌 수 있습니다
일반적으로 Filter 를 만들면 일반 Win32 DLL 프로젝트를 사용합니다. 또한 일반 Filter 프로젝트에서는 MFC 를 사용하지 않습니다. 이 시점에서 응용 프로그램은 CoCreateInstance 함수 Filter 인스턴스를 통과합니다. Filter 와 애플리케이션의 바이너리 수준 공동 작업. 또 다른 방법은 MFC 의 응용 프로그램 프로젝트에 Filter 를 만드는 것입니다.
이 경우 Filter 는 COM 구성 요소로 등록할 필요가 없으며 Filter 와 응용 프로그램 간의 협업은 소스 코드 수준입니다. CoCreateInstance 함수를 사용하지 않고
m _ pFilterobject = new cfilterclass 와 같이 filter 인스턴스를 만듭니다
//make the initial refcount 1 to match com creation
m _ pfilterobject-gt; Addref ();
필터의 기본 클래스는 객체에 대한 참조 수를 구현하므로 두 번째 경우에도 만든 Filter 객체에 대한 작업은 COM 표준을 완전히 따를 수 있습니다.
Filter 는 독립 실행형 기능 모듈이므로 Filter 를 다른 타사 DLL 에 의존하지 않는 것이 좋습니다. Filter 는 COM 의 위치 투명성을 가지고 있기 때문에, Filter 파일은 하드 드라이브의 어느 곳에나 위치만 이동하고 다시 등록할 수 있습니다. 그러나 이 시점에서 파일러가 다른 DLL 에 의존하면 파일러의 해당 DLL 포지셔닝에 문제가 발생할 수 있습니다.
Filter 는 Filter Graph 와 별도로 사용할 수 없습니다. 따라서 Filter Graph 를 우회하여 Filter 가 직접 구현한 모듈 기능을 사용하려면 Filter 를 DMO(DirectX Media Object) 로 이식하십시오. DirectShow 애플리케이션 개발자의 경우 OleInitialize 를 사용하여 초기화하는 것을 잊지 마십시오.
2. Filter 등록
Filter 는 COM 구성 요소이므로 사용하기 전에 반드시 등록해야 합니다. Filter 의 등록 절차는 regsvr32.exe 입니다. 명령줄 인수 /u 를 가지고 있으면 로그아웃을 의미합니다. 띠가 /s 이면 등록/로그아웃 성공 여부를 묻는 대화 상자가 팝업되지 않습니다. Build Filter 프로젝트 중 자동 등록을 원하시면 VC Project settings 의 Custom Build 페이지에
description: registerfilter
outputs: $ (targetdir) \ $ (targetname 등록 정보는 레지스트리에 저장됩니다. 전자는 HKEY _ classes _ root \ clsid \ filterclsid \, 후자는 HKEY _ classes _ root \ clsid \; COM 정보는 Filter 가 CoCreateInstance 함수를 통해 만들 수 있는 표준 COM 구성 요소임을 나타내며, Filter 정보는 Graphedit 을 통해 볼 수 있는 이 Filter 를 설명하는 정보를 표시합니다. Graphedit 이 쓴 Filter 를 보고 싶지 않다면, Filter 정보를 전혀 등록하지 않아도 된다. (알버트 아인슈타인, Northern Exposure (미국 TV 드라마), 예술명언) 그리고 걱정하지 마세요. 이렇게 해도 Filter 의 기능에 전혀 영향을 주지 않습니다.
필터 정보 등록을 마스킹하는 방법도 간단합니다. CBaseFilter 가 IAMovieSetup 인터페이스의 두 가지 함수인 Register 와 Unregister 를 구현했기 때문입니다. 이 두 함수를 다시 로드하기만 하면 됩니다. 바로 return S_OK 입니다.
Filter 의 Merit 값입니다. 이 값은 Microsoft 의 스마트 연결 함수에서 사용됩니다. Graphedit 에서 소스 파일러에 가입하면 해당 pin 에서 "Render" 를 실행하면 일부 파일러가 자동으로 연결됩니다. Merit 의 값은 다음과 같이 참조됩니다.
MERIT_PREFERRED = 0x800000,
MERIT_NORMAL = 0x600000
MERIT_DO_NOT_USE = 0x200000,
merit _ SW _ compressor = 000 Merit 의 값이 클수록 이 Filter 의 기회가 커진다.
3. Filter 간 핀 연결 프로세스
Filter 는 Filter Graph 에 추가되고 다른 Filter 와 전체 링크로 연결된 경우에만 작동합니다. Filter 간의 연결 (즉, Pin 간의 연결) 은 실제로 양 당사자를 연결하는 Media 유형 간의 협상 과정입니다. 연결 방향은 항상 Output pin 에서 Input pin 을 가리킵니다. 연결의 일반적인 프로세스는 연결 함수를 호출할 때 전체 Media type 을 지정한 경우 이 Media type 을 사용하여 연결하고 성공 여부는 연결 프로세스를 종료하는 것입니다. Media type 이 지정되지 않았거나 완전히 지정되지 않은 경우 다음 열거 절차로 이동합니다. 연결할 Input pin 에 있는 모든 Media type 을 열거하고 이러한 Media type 을 하나씩 사용하여 Output pin 에 연결합니다 (연결 함수가 불완전한 Media type 을 제공하는 경우 먼저 열거된 각 Media type 을 일치 확인함). Output pin 도 이러한 media 를 수용합니다 모든 Input pin 에 열거된 Media type, Output pin 이 지원되지 않으면 Output pin 에 있는 모든 Media type 을 열거하고 이들 Media type 을 하나씩 사용하여 Input pin 에 연결합니다. Input Pin 이 Media type 중 하나를 수락하면 pin 간의 연결도 성공으로 선언됩니다. Output Pin 의 모든 Media type, Input pin 이 지원되지 않으면 두 pin 간의 연결 프로세스 선언이 실패합니다.
각 Pin 은 해당 Pin 에서 지원되는 모든 Preferred Media type 을 제공하는 GetMediaType 함수를 구현할 수 있습니다 (일반적으로 Output pin 에서만 구현되며 Input pin 은 주로 CheckMediaType 을 구현하여 현재 제공되는 meme 이 지원되는지 확인합니다 연결 중 Pin 에 열거된 모든 미디어 유형이 여기에 제공됩니다.
CBasePin 클래스에 protected 멤버 변수 m_bTryMyTypesFirst 가 있으며 기본값은 false 입니다. 사용자 정의 Filter 의 Output pin 에서 이 변수의 값을 true 로 변경하면 자체 연결 프로세스를 사용자 정의할 수 있습니다 (Output pin 의 Media type 을 먼저 열거함).
CompleteConnect 함수는 Pin 간의 연결이 성공하면 해당 pin 에서 호출됩니다. 우리는 여기서 연결상의 Media type 에 대한 정보를 얻을 수 있고, 약간의 계산 등을 할 수 있다. Output pin 의 CompleteConnect 구현에서 또 다른 중요한 작업은 Filter Graph 가 실행된 후 Sample 전송에 사용되는 메모리 구성을 협상하는 것입니다. 이는 상호 작용 프로세스이기도 합니다. 먼저 Input pin 의 구성 요구 사항을 묻고, Input pin 이 메모리 관리자 (Allocator) 를 제공하는 경우 Input pin 의 메모리 관리자를 우선적으로 사용합니다. 그렇지 않으면 Output pin 이 직접 생성한 메모리 관리자를 사용합니다. 일반적으로 DecideBufferSize 를 구현하여 Sample 을 저장할 메모리 크기를 결정합니다. 참고: 이 프로세스 협상이 완료된 후 실제 메모리가 할당되지 않고 Output pin 의 Active 함수 호출이 대기해야 합니다.
4. Filter Media type 개요
Media type 은 일반적으로 AM_MEDIA_TYPE 과 CMediaType 의 두 가지 표현으로 나타낼 수 있습니다. 전자는 Struct 이고, 후자는 이 Struct 에서 상속된 클래스입니다.
각 Media type 은 Major type, Subtype 및 Format type 의 세 부분으로 구성됩니다. 이 세 부분 모두 GUID 를 사용하여 고유하게 레이블을 지정합니다. Major type 은 주로 Media type 을 설명합니다. 예를 들어, 이것이 비디오, Video 또는 Stream 인지를 지정합니다. Subtype 은 Media type 을 더 다듬고, Video 가 있다면 UYVY 또는 YUY2 또는 RGB24 또는 RGB32 등을 추가로 지정할 수 있습니다. Format type 은 Struct 로 Media type 을 더욱 다듬습니다.
Media type 의 세 부분 모두 특정 GUID 값을 지정하면 이 Media type 이 완전히 지정됩니다. Media type 의 세 부분 중 하나가 GUID_NULL 이면 이 Media type 은 완전히 지정되지 않은 것입니다. GUID_NULL 은 와일드 카드 역할을 합니다.
일반적으로 사용되는 majortype:
media type _ video;
미디어 유형 _ 오디오;
미디어 유형 _ analog 비디오; //analogcapture
미디어 유형 _ analogaudio;
미디어 유형 _ 텍스트;
미디어 유형 _ midi;
미디어 유형 _ stream;
미디어 유형 _ interleaved; //dv camcorder
media type _ mpeg1 systemstream;
미디어 유형 _ mpeg2 _ pack;
미디어 유형 _ mpeg2 _ pes;
미디어 유형 _ DVD _ encrypted _ pack;
미디어 유형 _ DVD _ navigation;
일반적으로 사용되는 subtype:
media subtype _ Yu y2;
미디어 subtype _ yvyu;
미디어 subtype _ yuyv;
미디어 subtype _ uyvy;
미디어 subtype _ yvu9;
미디어 실체 _ y411;
미디어 subtype _ rgb4;
미디어 subtype _ rgb8;
미디어 실체 _ rgb565;
미디어 실체 _ rgb555;
미디어 subtype _ rgb24;
미디어 subtype _ rgb32;
미디어 subtype _ argb32; //contains alpha value
media subtype _ overlay;
media subtype _ mpeg1 packet;
media subtype _ mpeg1 payload; //videopayload
media subtype _ mpeg1 audio payload; //audiopayload
media subtype _ mpeg1 system; //a/v payload
media subtype _ mpeg1 videocd;
미디어 subtype _ mpeg1 비디오;
미디어 subtype _ mpeg1 오디오;
미디어 subtype _ avi;
media subtype _ ASF;
미디어 subtype _ qtmovie;
미디어 subtype _ PCM;
미디어 subtype _ wave;
미디어 subtype _ dvsd; //dv
media subtype _ dvhd;
미디어 subtype _ dvsl;
m.
Edia subtype _ mpeg2 _ video;
미디어 subtype _ mpeg2 _ 프로그램;
미디어 subtype _ mpeg2 _ transport;
미디어 subtype _ mpeg2 _ audio;
미디어 subtype _ Dolby _ ac3;
미디어 subtype _ DVD _ subpicture;
미디어 subtype _ DVD _ lpcm _ audio;
미디어 subtype _ DVD _ navigation _ PCI;
미디어 subtype _ DVD _ navigation _ DSI;
미디어 subtype _ DVD _ navigation _ provider;
일반적으로 사용되는 formattype:
format _ none
format _ dv info dv info < P >
format _ mpeg2 video mpeg2 video info
format _ video info videoinfoheader
< P >format _ waveformatex waveformatex
5.filter 간 데이터 전송
Filter 간 데이터는 sap 를 통해 이루어집니다 Sample 은 자체 데이터 버퍼를 가진 COM 구성 요소입니다. Sample 은 Allocator 가 통합 관리합니다. 다음 그림과 같이
Filter 간에 데이터를 전송하는 방법에는 Push 모드와 Pull 모드의 두 가지가 있습니다.