一、Listener(监听器)
描述:
它是实现了javax.servlet.ServletContextListener接口的服务端程序,随web的init而启动,只初始化一次,随web的destroy而摧毁。
作用:
监听器用于监听web应用中的某些对象、信息的创建、销毁、增加、修改、删除等动作的发生,然后做出相应的响应处理。
当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。
常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。
分类:
按监听的对象划分:
HttpSession对象监听器
ServletContext对象监听器
ServletRequest对象监听器
按监听的事件划分:
对象自身的创建和销毁的的监听器
对象中属性的创建和消除的监听器
session中某个对象的状态变化的监听器
常用监听器:(servlet3.0中不需要在web.xml中配置,可用注解的方式:@WebListener)
HttpSessionListener:监听session建立与销毁
HttpSessionAttributeListener:监听session属性的增加、移除以及属性值改变
ServletContextListener:监听web上下文的初始化(服务器已准备好接收请求)
ServletContextAttributeListener:监听web上下文属性的增加、删除、属性值变化
ServletRequestListener:监听request的创建与销毁
ServletRequestAttributeListener:监听request的属性的增加、删除、属性值变化
二、Filter(过滤器)
描述:
在java web中,将Request、Response提前过滤一些信息,或者提前设置一些参数,然后传入servlet进行业务逻辑的处理,或者进行统一字符集的处理,或者过滤一些非法字符。
作用:
减少服务器负载,减少压力。
三、Interceptor(拦截器)
描述:
在面向切面编程(AOP:aspect oriented programming)就是你的service或者一个method,前调用一个方法,或者在之后调用一个方法,比如动态代理就是拦截器的实现,SpringMVC中的前置通知和后置通知。
四、Filter和Interceptor区别
Filter基于函数回掉,Interceptor基于java反射机制;
Filter依赖servlet容器,Interceptor不依赖;
Filter对所有请求起作用,Interceptor只对action起作用;
在action的生命周期中,Filter只在容器启动时才被调用一次,Interceptor可以多次被调用。
五、执行顺序
Listener --- Filter --- Interceptor --- action --- Interceptor --- Filter