什么是Filter

Filter中文意思为过滤器。顾名思义,过滤器可在浏览器以及目标资源之间起到一个过滤的作用。例如:水净化器,可以看成是生活中的一个过滤器,他可以将污水中的杂质过滤,从而使进入的污水变成净水。

对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息

Filter被称为过滤器或者拦截器,其基本功能就是对servlet容器调用servlet的过程进行拦截,从而在servlet进行响应处理前后实现一些特殊功能(用于对request或response进行拦截,在用户的请求到达指定的URI之前,先过Filter的拦截处理规则(逻辑代码的处理修改),之后再正常处理用户请求。)。这就好比现实中的污水净化设备。
当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源,当服务器接收到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要先将响应结果发送给拦截器,在拦截器中对响应结果进行处理后,才发送给客户端。
其实,Filter过滤器就是一个实现了javax.servlet.Filter接口的类,在接口中定义了三个方法。
1.init(FilterConfig filterConfig);

charles过滤 过滤filter_charles过滤


用来初始化过滤器,开发人员在init方法中完成与构造方法类似的初始化功能。

2.doFilter(ServletRequest request,ServletResponse response,FilterChain chain);

charles过滤 过滤filter_前端_02

3.destroy();

charles过滤 过滤filter_前端_03

释放被Filter对象打开的资源,例如关闭数据库和IO流。

这三个方法都是Filter的生命周期方法,其中,init()方法在web应用程序加载的时候调用,destory()方法在web应用程序卸载的时候调用,这二个方法都会被调用一次,而doFilter()方法只有客服端请求时就会被调用,并且Filter所有的工作集中在doFilter()方法中。