目录
一、过滤器概述
过滤器应用在服务器上类似于防火墙,用户的请求和响应报文在转化为HttpServletRequest和HttpServletResponse对象后,都会先经过过滤器(实现filter接口的Java类)进行处理,由过滤器来决定是否放行用户的请求到项目的目标资源,服务端用户请求的响应报文HttpServletResponse对象也需要先经过过滤器后,才能转化为响应报文响应给客户端。
因此,过滤器可以决定是否允许用户的请求到达目标资源,以及对用户的响应信息做处理后在响应给客户端。
过滤器应用场景:
1、日志记录
2、性能分析
3、乱码处理
4、登录控制
5、跨域处理
。。。
二、过滤器使用
使用步骤:
1、实现Filter接口
2、重写doFilter过滤方法
3、配制过滤器,指定要过滤的请求资源
- 方式一: web.xml
- 方式二: 注解
代码测试:
2.1 注解方式配置过滤器
三、过滤器生命周期
①实例化过滤器----->项目启动---->调用一次无参构造器(1次)
②执行init方法初始化----->项目启动、构造器执行之后执行一次(1次)
③调用doFilter方法过滤用户请求------>用户每次请求都会自动调用此方法(n次)
④销毁过滤器---->服务关闭------>调用一次destory方法(1次)
代码测试:
四、过滤器链及其执行顺序
用户请求的目标资源在服务端可能有多个过滤器对其请求进行过滤,那么这多个过滤器针对用户的本次请求就形成了一个过滤器链。因此,用户请求的目标资源不同其对应的过滤器链可能也不相同。如下图:
当在服务端有多个过滤器对用户的请求进行过滤时,它们的执行顺序是怎样的呢?
- web.xml方式:
过滤器<filter-mapping>映射路径标签元素在配置文件中的顺序(自上而下)即为过滤器链的执行顺序。
- 注解方式:
同包下,过滤器类名的字典顺序即为过滤器链的执行顺序
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!