过滤器
1、什么是过滤器?
Servlet规范中定义的一种特殊的组件,用来拦截容器的调用过程。容器收到请求之后,首先调用过滤器,然后再调用Servlet
2、过滤器的执行流程: 流程图中可以看出 过滤器和Servlet共享同一个request和response对象
单个过滤器的执行流程:
多个过滤器的执行流程:
3、过滤器的优先级
一个Web应用中,可以有多个过滤器,它们的优先级由位于web.xml文件中的声明顺序决定,具体是按照<filter-mapping>的顺序来决定的。如下代码所示,filter1和filter2都已经注册,执行顺序是filter2 ,filter1 。
fiter:init()---启动服务
servlet:init()
fiter:service()---请求
servlet:service()
servlet:destroy()
fiter:destroy()---关闭服务
5、如何编写过滤器?
a 实现Filter接口,并覆盖三个方法(destroy,init,doFilter),过滤逻辑在doFilter方法中实现
b 容器启动之后会立即创建过滤器实例(只会创建一个),接下来会调用init方法(只执行一次)
FilterConfig:可以用来读取初始化参数
c 容器会调用doFilter方法来处理请求
FilterChain(过滤器链):如果调用了该对象的doFilter方法则请求继续向后执行,否则中断请求不再向后执行
d 容器在销毁过滤器实例之前会调用destroy方法(只执行一次)
web.xml中注册过滤器
监听器
1、什么是监听器?
servlet规范中定义的一种特殊的组件,用来监听容器产生的事件并进行相应的处理。容器会为每个监听器只创建一个实例。
容器一般会产生什么事件?
绑定数据相关事件
容器调用了session,request,servletContext的setAttribute,removeAttribute产生的事件
生命周期相关事件
容器创建销毁session,request,servletContext等。
2、监听器相关概念:
事件源:被监听的对象。 三个域对象 request session servletContext
监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器
3、 监听器的分类:
第一维度:
按照被监听的对象分:ServletRequest域 HttpSession域 ServletContext域
第二维度:
按照监听的内容分: 监听域对象的创建与销毁的 监听域对象的属性变化的
总结如图:
ServletContextListener监听器的主要作用:
1 初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动 连接池的初始化
2 加载一些初始化的配置文件 --- spring的配置文件
3 任务调度:定时器----Timer/TimerTask
4、如何编写监听器呢?
a)编写一个监听器类去实现监听器接口
b)覆盖监听器的方法
c)需要在web.xml中进行配置---注册
5、三种监听域的生命周期
ServletRequest
何时创建:每一次请求都会创建request
何时销毁:请求结束
HttpSession
何时创建:第一次调用request.getSession时创建
何时销毁:服务器关闭销毁 session过期 手动销毁
ServletContext
何时创建:服务器启动创建
何时销毁:服务器关闭销毁