JSP 필터
서블릿과 JSP의 필터는 Java 클래스이며 존재 목적은 다음과 같습니다.
백엔드 리소스에 대한 액세스 요청 시 가로채기
서버에서 클라이언트로 반환된 응답 관리
아래에는 일반적으로 사용되는 여러 가지 필터 유형이 나열되어 있습니다.
인증 필터
데이터 압축 필터
암호화 필터
이벤트에 대한 리소스 액세스 필터
이미지 변환 필터
로그인 및 인증 필터
MIME 유형 체인 필터
토큰 필터
XML 콘텐츠를 변환하는 XSL/T 필터
필터가 웹에 삽입됩니다. .xml 파일을 만들고 서블릿, JSP 파일 또는 URL 패턴의 이름을 매핑합니다. 배포 설명 파일 web.xml은 <Tomcat-installation-directory>conf 디렉터리에서 찾을 수 있습니다.
JSP 컨테이너는 웹 애플리케이션을 시작할 때 각 필터의 인스턴스를 생성합니다. 이러한 필터는 배포 설명자 파일 web.xml에서 선언되고 선언된 순서대로 실행되어야 합니다.
서블릿 필터 메소드
필터는 javax.servlet.Filter 인터페이스를 구현하는 Java 클래스입니다. javax.servlet.Filter 인터페이스는 세 가지 메소드를 정의합니다:
일련 번호 | < th>방법 &설명|||||||||
---|---|---|---|---|---|---|---|---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain)
<🎜>클라이언트가 마지막에 리소스를 요청하기 때문에 요청/응답이 필터 체인을 통과할 때마다 컨테이너는 이 메소드를 호출합니다. 체인의< /td> | ||||||||
2 | public void init(FilterConfig filterConfig)<🎜> <🎜> 컨테이너가 이 메소드를 호출합니다. 필터가 서비스에 배치되었음을 나타냅니다. | ||||||||
3 | public void destroy()<🎜> <🎜>컨테이너는 이 메소드를 호출하여 서비스에서 필터가 제거되고 있음을 나타냅니다. |
JSP 필터 예
이 예는 JSP 파일에 대한 각 액세스의 IP 주소와 날짜 및 시간을 인쇄합니다. 물론 이것은 간단한 필터 사용법에 대한 아이디어를 제공하기 위한 간단한 예일 뿐이지만 이러한 개념을 사용하여 더 복잡한 프로그램을 직접 구성할 수 있습니다.
// 引入Java包 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 实现 Filter 类 public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException{ // 获取初始化参数 String testParam = config.getInitParameter("test-param"); //打印初始化参数 System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // 获取客户端ip地址 String ipAddress = request.getRemoteAddr(); // 输出ip地址及当前时间 System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // 传递请求道过滤器链 chain.doFilter(request,response); } public void destroy( ){ /* 在Filter实例在服务器上被移除前调用。*/ } }
LogFilter.java 파일을 컴파일한 후 컴파일된 클래스 파일을 <Tomcat 설치 디렉터리>/webapps/ROOT/WEB-INF/classes 디렉터리에 넣습니다.
web.xml 파일의 JSP 필터 매핑
서블릿을 정의한 후 필터를 정의한 다음 URL 또는 JSP 파일 이름에 매핑하는 것과 거의 동일합니다. 매핑되었습니다. 배포 설명 파일 web.xml에서 필터 매핑을 위해 <filter> 태그를 사용합니다.
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
위 필터는 " /*"를 지정했기 때문에 모든 서블릿과 JSP 프로그램에 적용됩니다. 몇 개의 서블릿이나 JSP 프로그램에만 필터를 적용하려는 경우 서블릿이나 JSP 경로를 지정할 수도 있습니다.
이제 평소대로 서블릿이나 JSP 페이지에 접속하면, 서버 로그에 접속 기록이 생성된 것을 확인할 수 있습니다. Log4J 로거를 사용하여 다른 파일에 기록할 수도 있습니다.
여러 필터 사용
웹 애플리케이션에서는 다양한 필터를 정의할 수 있습니다. 이제 AuthenFilter와 LogFilter라는 두 개의 필터가 정의되었으므로 다음과 같이 다른 매핑을 생성한다는 점을 제외하면 다른 단계는 이전과 동일합니다.
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
필터 애플리케이션 순서
web.xml에서 <filter> 요소가 매핑되는 순서에 따라 컨테이너가 이러한 필터를 적용하는 순서가 결정됩니다. 적용 순서를 바꾸려면 web.xml에 정의된 <filter> 요소의 순서를 바꾸면 됩니다.
예를 들어 위의 예에서는 LogFilter를 먼저 적용한 다음 AuthenFilter를 적용하지만 다음 예에서는 적용 순서를 반대로 적용합니다.
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>