1. 필터 소개
필터를 필터라고도합니다. 서블릿 기술에서 가장 흥미로운 기술입니다. 웹 개발자는 필터 기술을 통해 웹 서버에서 관리하는 모든 웹 리소스 (예 : JSP, Servlet, Static Image Files 또는 Static HTML 파일과 같은 모든 웹 리소스를 가로 채어 일부 특수 기능을 달성합니다. 예를 들어, URL 레벨 권한 액세스 제어, 민감한 어휘 필터링 및 응답 정보를 압축하는 것과 같은 일부 고급 기능을 구현하십시오.
서블릿 API는 필터 인터페이스를 제공합니다. 웹 응용 프로그램을 개발할 때 서면 Java 클래스 가이 인터페이스를 구현하면 Java 클래스를 필터 필터라고합니다. 필터 기술을 통해 개발자는 다음과 같이 대상 리소스에 액세스하기 전에 사용자의 액세스 요청 및 응답을 구현할 수 있습니다.
2. 필터는 어떻게 가로 채 웁니다.
필터 인터페이스에는 도필터 방법이 있습니다. 필터를 작성하고 인터셉트 할 웹 리소스를 구성 할 때 웹 서버는 웹 리소스의 서비스 메소드를 호출하기 전에 매번 도필터 필터 메소드를 호출합니다. 따라서이 방법에서 코드를 작성하면 다음과 같은 목적을 달성 할 수 있습니다.
1. 대상 리소스를 호출하기 전에 코드를 실행하십시오.
2. 대상 리소스를 호출할지 여부 (즉, 사용자가 웹 리소스에 액세스 할 수 있는지).
3. 대상 리소스를 호출 한 후 코드 조각을 실행하십시오.
웹 서버가 도필터 메소드를 호출하면 필터 체인 객체를 전달합니다. FilterChain 객체는 필터 인터페이스에서 가장 중요한 객체입니다. 또한 도필터 방법을 제공합니다. 개발자는 필요에 따라이 방법을 호출할지 여부를 결정할 수 있습니다. 이 메소드가 호출되면 웹 서버는 웹 리소스의 서비스 메소드를 호출합니다. 즉, 웹 리소스에 액세스 할 수 있습니다. 그렇지 않으면 웹 리소스에 액세스되지 않습니다.
3. 필터 개발을 시작합니다
3.1. 필터 개발 단계
필터 개발은 두 단계로 나뉩니다.
1. 필터 인터페이스를 구현하고 도필터 방법을 구현하기 위해 Java 클래스를 작성하십시오.
2. Web.xml 파일의 <filter> 및 <filter-mapping> 요소를 사용하여 서면 필터 클래스를 등록하고 인터셉트 할 수있는 리소스를 설정하십시오.
필터 예 :
ME.GACL.WEB.FILTER; import java.io.ioException; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servlet.servletexception; import javax.servlet.servletrequest; import; javax.servlet.servletresponse;/*** @classname : filterdemo*@description : 3 가지 전형적인 필터 응용 프로그램 :*, 당신은 체인을 호출 할 것인지 결정할 수 있는지 결정할 수 있습니다. dofilter (요청, 응답) 메소드,*, 대상 리소스를 실행하도록하기 전에 대상 리소스를 실행할 수 있는지, 그리고 당신은 요청/응답을 준비 할 수 있는지, 그리고 당신은 대상 리소스를 실행할 수 있는지, 그리고 당신은 대상 리소스가 요청/응답이 될 수 있는지, 그리고 당신은 대상 리소스를 실행할 수 있습니다. 대상 리소스가 실행되고 대상 리소스의 실행 결과를 캡처하여 일부 특수 기능을 실현할 수 있으므로* @Author : 小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小 � 응답, FilterChain 체인) IoException, ServleTeXception {// 요청 및 응답에 대한 전처리를 제출하십시오. request.setcharacterencoding ( "utf-"); response.setcharacterencoding ( "utf-"); response.setContentType ( "text/html; charset = utf-"); system.out.println ( "실행 전 필터 데모 !!!"); Chain.dofilter (요청, 응답); // 대상 리소스가 실행 및 릴리스 System.out.println ( "실행 후 FilterDemo! Web.xml에서 필터를 구성합니다.
<? xml 버전 = "." 인코딩 = "utf-"?> <Web-App version = "." xmlns = "http://java.sun.com/xml/ns/javaee"xmlns : xsi = "http://www.w.org//xmlschema-instance"xsi : schemalocation = "http://java.sun.com/xml/ns/navaee http://java.sun.com/xml/ns/javaee/web-app__.xsd "> <display-name> </display-name> <welcome-file-list> index.jsp </welcle-file> </welcome-file-list> <!-구성 필터-> <filter> <filter-name> filterDemo </filter-name> <filter-class> me.gacl.web.filter.filterdemo </filter-class> </filter> <!-맵핑 필터-> <filter-mapping> <filter-name> filterdemo </filter-name> <!-"/*" 요청-> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
3.2. 필터 체인
웹 애플리케이션에서는 여러 필터를 개발하고 작성하여 하나의 필터 체인으로 결합됩니다.
웹 서버는 Web.xml 파일에 필터가 등록 된 순서에 따라 먼저 호출 할 필터를 결정합니다. 첫 번째 필터의 도필터 메소드가 호출되면 웹 서버는 필터 체인을 나타내는 필터 체인 객체를 만들어 메소드로 전달합니다. 도필터 방법에서 개발자가 FilterChain 객체의 도필터 메소드를 호출하면 웹 서버는 필터 체인 객체에 필터가 여전히 있는지 확인합니다. 있으면 두 번째 필터가 호출되고 아니오가 있으면 대상 리소스가 호출됩니다.
4. 필터의 수명주기
4.1. 필터 생성
필터의 생성 및 파괴는 웹 서버의 책임입니다. 웹 응용 프로그램이 시작되면 웹 서버는 필터의 인스턴스 객체를 생성하고 init 메소드를 호출하여 객체의 초기화 기능을 완료하여 후속 사용자 요청에 대한 차단을 준비합니다. 필터 객체는 한 번만 생성되며 INT 메소드는 한 번만 실행됩니다. INT 메소드의 매개 변수를 통해 현재 필터 구성 정보를 나타내는 FilterConfig 객체를 얻을 수 있습니다.
4.2. 필터의 파괴
웹 컨테이너는 파괴 방법을 호출하여 필터를 파괴합니다. 파괴 방법은 필터의 수명주기 동안 한 번만 실행됩니다. 파괴 방법에서 필터가 사용하는 리소스를 제거 할 수 있습니다.
4.3. FilterConfig 인터페이스
필터를 구성 할 때 사용자는 <init-param>을 사용하여 필터의 초기화 매개 변수를 구성 할 수 있습니다. 웹 컨테이너가 필터 객체를 인스턴스화하고 INT 메소드를 호출하면 필터 콘피드 객체가 필터 초기화 매개 변수를 캡슐화하면 개발자가 필터를 작성하면 다음을 얻을 수 있습니다.
문자열 getFiltername () : 필터의 이름을 얻습니다.
문자열 getInitParameter (문자열 이름) : 배포 설명에 지정된 이름으로 초기화 매개 변수의 값을 반환합니다. 존재하지 않으면 NULL을 반환하십시오.
열거 GetInitParameterNames () : 필터의 모든 초기화 매개 변수의 열거 된 이름 세트를 반환합니다.
Public ServletContext getServletContext () : 서블릿 컨텍스트 객체에 대한 참조를 반환합니다.
예 : FilterConfig를 사용하여 필터 구성 정보를 얻습니다
packing me.gacl.web.filter; import java.io.ioexception; import java.util.enumeration; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servletexception javax.servlet.servletresponse; public class filterdemo는 필터 {/* 필터 초기화* @see javax.servlet.filter#init (javax.servlet.filterconfig)*/ @reatidepublic void init (filterconfig filterconfig) serve.out.out.out. 초기화 ---- ");/*** <Filter> <filter-name> FilterDemo </filter-name> <filter-class> me.gacl.wilter.filterdemo </filter-class> <!-Filterdemo 필터의 초기화 매개 변수 구성 파라미터의 구성 매개 변수 구성을 구성하십시오. 필터 </description> <param-name> name </param-name> <param-value> gacl </param- value> </init-param> <init-p aram> <description> 필터 디모의 초기화 매개 변수를 구성하십시오 필터 </description> <param-name> like </param-name> <param-value> java </param-value> </init-param> </filter> <filter-mapping> <filter-name> filterdemo </filter-name> <!-"/*"는 모든 요청을 가로 채는 것을 의미합니다-> <url-fattern>/*</url-pattern> 필터의 이름 문자열 filtername = filterconfig.getFiltername (); // web.xml string initparam = filterconfig.getInitParameter ( "name")에서 구성된 초기화 매개 변수를 가져옵니다. String initParam = FilterConfig.getInitParameter ( "like"); // 필터의 모든 초기화 매개 변수의 열거 이름 세트를 반환합니다. 열거 <String> initParameterNames = FilterConfig.getInitParameterNames (); System.out.println (filtername); System.out.println (initparam); System.out.println (initparam); System.out.println (initparam); while (initparameternames.hasmoreElements ()) {String paramname = (string) initparameternames.nextelement (); system.out.println (paramname);}}@atedredepublic void dofilter (servletrequest 요청, ServletResponse 응답, 필터 체인). {System.out.println ( "실행 전 필터 데모 !!!"); Chain.dofilter (요청, 응답); // 대상 리소스를 실행하고 system.out.println ( "실행 후 필터 데모 !!!");}@atrivePublic void destrove () {system.out.println ( "--- 필터 파괴 ----");}} 5. 필터 배포
필터 배치는 두 단계로 나뉩니다.
1. 레지스터 필터
2. 매핑 필터
5.1. 레지스터 필터
필터를 개발 한 후에는 웹 서버에서 호출 할 수 있도록 web.xml 파일에 등록해야합니다.
Web.xml 파일의 필터 예제 등록 :
<Filter> <cression> FilterDemo 필터 </descript> <filter-name> filterDemo </filter-name> <filter-class> me.gacl.web.filter.filterdemo </filter-class> <!-filterdemo 필터의 구성 매개 변수-> init-param> </init-param> </filter-class> <! RIPT> <Param-Name> 이름 </param-name> <param-value> gaCl </param-value> </init-param> <init-param> <description> 필터 데모 필터의 초기화 매개 변수 구성 </descriper> <param-name> </param-name> <param-value> java </initt-param>
<설명>은 설명 정보를 추가하는 데 사용됩니다. 이 요소의 내용은 비어있을 수 있으며 <cression>을 구성 할 수 없습니다.
<filter-name>은 필터의 이름을 지정하는 데 사용되며 요소의 내용을 비울 수 없습니다.
<filter-class> 요소는 필터의 완전한 자격있는 클래스 이름을 지정하는 데 사용됩니다.
<init-param> 요소는 필터에 대한 초기화 매개 변수를 지정하는 데 사용되며, 하위 요소 <param-name>은 매개 변수의 이름을 지정하고 <param-value> 매개 변수의 값을 지정합니다. 필터에서 FilterConfig 인터페이스 객체를 사용하여 초기화 매개 변수에 액세스 할 수 있습니다. 필터가 초기화 매개 변수를 지정하지 않아도되면 <init-param> 요소가 구성되지 않을 수 있습니다.
5.2. 매핑 필터
web.xml 파일에 필터를 등록한 후에는 web.xml 파일에 필터를 맵핑해야합니다.
<!-매핑 필터-> <Filter-Mapping> <Filter-Name> FilterDemo </filter-name> <!-"/*"는 모든 요청을 가로 채는 것을 의미합니다 .-> <url-pattern>/*</url-pattern> </filter-mapping>
<필터 매핑> 요소는 필터가 가로 채기에 담당하는 리소스를 설정하는 데 사용됩니다. 필터 인터셉트는 리소스를 두 가지 방식으로 지정할 수 있습니다. 서블릿 이름과 리소스 액세스 요청 경로.
<filter-name> 하위 요소는 필터의 등록 이름을 설정하는 데 사용됩니다. 이 값은 <url-pattern> 요소에 선언 된 필터의 이름이어야합니다. 필터 (필터와 관련된 URL 스타일)에 의해 인터셉트 된 요청 경로 설정
<servlet-name> 필터에 의해 가로 채워진 서블릿의 이름을 지정합니다.
<spatcher> 필터에 의해 가로 채는 자원이 서블릿 컨테이너에 의해 호출되는 방식을 지정합니다. 요청 중 하나, 포함, 포워드 및 오류 및 기본 요청 중 하나 일 수 있습니다. 사용자는 여러 <디스패처> 하위 요소를 설정하여 지정할 수 있습니다
필터는 자원을 호출하는 다양한 방법을 가로 채립니다. 다음과 같이 :
<Filter-Mapping> <Filter-Name> testFilter </filter-name> <Url-pattern>/index.jsp </url-pattern> <spatcher> request </dispatcher> <spatcher> forward </dispatcher> </filter-mapping>
자식 요소가 설정할 수있는 값과 그 의미 :
1. 요청 : 사용자가 페이지에 직접 액세스하면 웹 컨테이너가 필터를 호출합니다. requestDisPatcher의 포함 () 또는 Forward () 메소드를 통해 대상 리소스에 액세스되면 필터가 호출되지 않습니다.
2. include : requestDispatcher의 포함 () 메소드를 통해 대상 리소스에 액세스하면 필터가 호출됩니다. 그 외에는 필터가 호출되지 않습니다.
3. forward : Target 리소스에 Forward () 메소드를 통해 대상 리소스에 액세스하면 필터가 호출되고 필터가 호출되지 않습니다.
4. 오류 : 선언적 예외 처리 메커니즘을 통해 대상 리소스가 호출되면 필터가 호출됩니다. 그 외에는 필터가 호출되지 않습니다.