컴퓨터 지식 네트워크 - 컴퓨터 프로그래밍 - 자바 필터란 무엇입니까! 그것의 기능과 역할은 무엇입니까?

자바 필터란 무엇입니까! 그것의 기능과 역할은 무엇입니까?

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 모드의 두 가지가 있습니다.

上篇: 아수스 노트북 A450 시리즈 2 노트북을 구입했는데, 충전기를 보니 플러그가 너무 커서 소켓에 꽂으려면 전원 어댑터를 구입해야 했습니다. 下篇: 적립금 대출로 해로에서 집을 사려면 어떤 조건, 중고 주택 거래 절차가 필요합니까?
관련 내용