Servlet中的过滤器和监听器
1.什么是过滤器?
Servlet规范中定义的一种特殊的组件,用来拦截容器的调用过程。容器收到请求之后,首先调用过滤器,然后再调用Servlet
2.生命周期:
1、servlet:servlet的生命周期始于它被装入web服务器的内存时,并在web服务器终止或重新装入servlet时结束。servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直至web服务器关闭或重新结束。
(1)、装入:启动服务器时加载Servlet的实例;
(2)、初始化:web服务器启动时或web服务器接收到请求时,或者两者之间的某个时刻启动。初始化工作有init()方法负责执行完成;
(3)、调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法;
(4)、销毁:停止服务器时调用destroy()方法。
2、filter:(一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行)
(1)、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;
(2)、每一次请求时都只调用方法doFilter()进行处理;
(3)、停止服务器时调用destroy()方法。
3、listener:类似于servlet和filter
web.xml 的加载顺序是:context- param -> listener -> filter -> servlet
4、interceptor:以struts的拦截器为例,加载了struts.xml以后,初始化相应拦截器。当action请求来时调用intercept方法,服务器停止销毁interceptor。
3.过滤器的执行流程
Øweb.xml中注册过滤器
<!-- 过滤器 --> <filter> <filter-name>filter1</filter-name> <filter-class>web.CommentFilter</filter-class> </filter> <filter-mapping> <filter-name>filter1</filter-name> <url-pattern>/comment</url-pattern> </filter-mapping>
4.什么是监听器?
servlet规范中定义的一种特殊的组件,用来监听容器产生的事件并进行相应的处理。容器会为每个监听器只创建一个实例。
5.监听器的分类:
第一维度:
按照被监听的对象分:ServletRequest域 HttpSession域 ServletContext域
第二维度:
按照监听的内容分: 监听域对象的创建与销毁的 监听域对象的属性变化的
总结如图:
6.如何编写监听器呢?
a)编写一个监听器类去实现监听器接口
b)覆盖监听器的方法
c)需要在web.xml中进行配置---注册
7.过滤器和拦截器的区别与联系:
a)拦截器是基于java反射机制的,而过滤器是基于函数回调的。
b)过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
c)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
d)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
e)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次
成功的秘诀在于永不改变既定的目标