概述:
servlet2.3后增加的新功能,运行在服务器端的程序,
先与之相关的servlet或者jsp页面之前运行
作用:
过滤请求和响应
应用场景:
过滤一些特殊符号或者敏感词
统一编码
自动登录
声明周期:
filter也是一个单实例多线程的
在项目启动的时候,服务器创建filter的对象,调用init方法实现初始化操作
每当请求来的时候,服务器获取一个线程,执行dofilter方法,实现过滤的逻辑
当服务器移除filter的时候或者服务器正常关闭的时候,服务器调用destroy方法,实现销毁操作
Filter方法:
init(FilterConfig):初始化
doFilter(ServletReqeust req,ServletResponse resp,FilterChain chain):执行过滤的方法
destroy():销毁
FilterChain:过滤链:
多个Filter组合在一起时,称之为过滤链
过滤链的执行顺序:
当一个filter收到请求的时候,调用chain.doFilter才可以访问下一个匹配的filter,
若当前的filter是最后一个filter,调用chain.doFilter才能访问目标资源
web.xml文件存在时由filter-mapping的位置决定
使用注解时 ,由Filter的实现类的类名决定 : 自然顺序决定
顺序 :
配置文件 和注释 优先 配置文件
配置文件按<filter-mapping>顺序 进行拦截
注释 的化 按文件名字 顺序 来进行拦截
filter的url-pattern的配置:
完全匹配:以"/"开始 例如:/demo1 /demo2 /aa/bb/demo3
目录匹配:以"/"开始 以"*"结束 例如:/aa/* /*
后缀名匹配:以"*"开始 例如: *.jsp *.html
filter-mapping中的子标签:
servlet-name:指定具体过滤哪个servlet的
dispatcher:指定过滤哪种方式过来的请求:
重要 REQUEST:默认值,只过滤 从浏览器发送过来的请求
重要 FORWARD:只过滤转发过来的请求
INCLUDE:只过滤包含过来的请求
ERROR:只过滤错误过来的请求
ASYNC:异步请求
标签:filter,顺序,请求,Filter,过滤,服务器 From: https://www.cnblogs.com/ningbaoer/p/17435578.html