#0、过滤器
在Web开发中,为了实现某些特殊的功能,经常需要对请求和响应消息进行处理。例如,在记录用户访问信息,统计页面访问次数,验证用户身份等。Filter可以实现用户在访问某个目标资源之前,对访问的请求和响应进行相关处理。
0.1Filter入门
0.1.1、什么事Filter入门
Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应前后实现一些特殊功能,它可看做一个过滤器,专门用于过滤污水杂志
如图,当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接受到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要将相应结果发送给过滤器,在拦截器中对响应结果行处理后,才会发送给客户端*
其实,Filter过滤器就是一个实现了javax.servlet.Filter接口的类
定义了三个方法:
需要注意的是,FilterChain代表Filter链上的对象,在当前Filter对象的doFilter()方法内部需要调用FilterChain对象的doFilter()方法,才能把请求交付给Filter链中的下一个Filter或者目标资源去处理
这三个方法都是Filter的生命周期方法,其中,init()方法在Web应用程序加载的时候调用,destroy()方法在Web应用程序卸载的时候调用,这两个方法都只会被调用一次,而doFilter()方法只要有客户端请求时就会被调用。
0.1.2实现第一个Filter程序
1、实现Filter接口重写doFilter()方法:
package com.monkey.filter;
import java.io.IOException;
import javax.servlet.*;
/**
* @author 作者
* @version 创建时间:2019年9月8日 下午8:34:22
* 类说明 过滤器例子
*/
//实现Filter接口
public class TestFilter01 implements Filter {
public TestFilter01() {
// TODO Auto-generated constructor stub
}
//重写doFilter()接口
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("1233");
response.getWriter().print("Filter1");
//FilterChain过滤链中需要
chain.doFilter(request, response);
}}
2、在Web.xml文件中进行过滤器的配置
<!-- 需要在web.xml文件中进行过滤器的配置 -->
<!-- 写完过滤器之后必须先注册一个过滤器 -->
<filter>
<filter-name>test</filter-name>
<filter-class>com.monkey.filter.TestFilter01</filter-class>
</filter>
<filter-mapping>
<filter-name>test</filter-name>
<!-- 用于匹配用户请求的URL,也即匹配的过滤路径 -->
<url-pattern>*</url-pattern>
</filter-mapping>
0.1.3、Filter链
在一个Web应同一用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一份URL进行拦截,如果多个Filter程序都对同一个URL进行拦截,那么这些Filter就会组成一个Filter链(也叫过滤连)。Filter链用FilterChain对象来表示,FilterChain对象中有一个doFilter()方法,该方法的作用就是让Filter链上的当前过滤器放行,请求进入下一个Filter。
0.1.4、FilterConfig接口
为了获取Filter程序在web.xml文件中的配置信息,Servlet API提供了一个FilterConfig接口,该接口封装了Filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法: