定义
拦截所有访问web资源的请求或者响应(servlet、Jsp页面、HTML页面),从而实现我们自己的业务逻辑,这些逻辑可以是实现访问权限的控制、过滤敏感词、压缩响应等功能。
原理
过滤器是"链接"在容器的处理过程中的,它会在servlet处理器之前访问进入的请求,并且在响应信息返回客服端之前访问这些响应信息。这样就可以动态的修改请求和响应中的内容。
创建Filter
创建web项目:
或者像这样建立web项目:
添加Tomcat服务器:
如果没有SmartTomcat,只有Tomcat像下面图片中这样:
则选择Tomcat里面的local,并向下面这样配置:
启动程序:
添加java包和servlet依赖:
创建过滤器并实现它的方法:
在web.xml中注册Filter:
当我们在执行的时候,发现会报404错误,那是因为我们没有重写Filter里面的init方法,在用Filter的时候必须重写init方法,因为web 工程启动的时候执行构造器方法和init 初始化方法 ,如果不重写初始化方法,就不会走过滤器。
重写Filter里面的init方法,然后执行过滤器:
我们会发现在浏览器中什么都没有输出,但是控制台中输出了doFilter里面内容,说明我们的过滤器起作用了 ,他拦截了所有的请求。当我们在doFilter方法里面加上下面的逻辑,浏览器就会输出内容:
上面filterChain里面的doFilter方法它的作用就是请求放行到下一个资源,这个资源有可能是过滤器,也可能是客户端。
Filter的生命周期
上面每一步分别对应不同的方法:
实例化对应Filter的构造器方法,初始化对应init()方法、销毁对应的是destroy()方法
Filter它是一个接口,该接口里面有如下几个方法:
destroy()
当web服务器调用该方法时,表示过滤器将被销毁。
init()
当web服务器调用该方法时,表示过滤器将被注册到服务中