过滤器Filter与监听器Listener

过滤器Filter

过滤器也是一种servlet   它也可以对用户的请求进行处理  , 但是他所做的处理,只是一些轻量级的处理。Fileter就好像jsp页面与servlet之间的一道关卡,如果这个web应用有Filter那么,jsp页面的请求在到达要去的servlet之前,先被Filter解惑,在Filter做一些处理之后,然后再让该请求去它原本要去的servlet。同理,Filter也可以对servlet生成的响应,进行拦截处理,让后再让它去它原本要去的jsp页面。

一个Filter类,要实现javax.servlet.Filter接口,这个接口提供如下三个方法:

init(FilterConfig  config)    ------对生成的Filter对象进行初始化    传入的config对象  可以可以调用方法来获取该Filter在web.xml中的配置参数                     

destory()                            ------在销毁Filter对象之前,自动调用该方法对资源进行回收  

doFilter(ServletRequest  request , ServletResponse  response, Filterchain  chain)            

                                         ------  在该方法内对拦截到达请求或响应   进行一些处理   然后交给它 目的servlet或jsp页面    

                                                 传入的request对象   表示 拦截到的request对象 

                                                传入的response对象   表示拦截到的response对象  

                                               传入的chain对象     可以通过调用chain.doFilter(request,response)   表示过滤器已经处理完了,将请求或者响应转发到它们想去的servlet

                                                或者jsp页面  

Filter实例对象的生命周期  

 牢记Filter也是一种提供轻量级服务的servlet,它提供服务同servlet一样,是通过实例对象调用处理方法

web应用加载→ 创建Filter类的实例对象 → 自动调用init()方法对该实例对象进行初始化  →   调用doFilter()方法对请求或响应进行处理  .........合适的时间  自动调用derstory()方法()进行资源回收  →  该Filter类的实例对象被销毁

Filter类的配置  

监听器Listener

通过过滤器 和servlet  可以看出它们两者都是对请求或者响应提供服务的。一个web应用被启动之后 ,内部不仅仅是请求和响应在活动,还有session对象开始,结束,web应用开始,结束,等等很多事件,

而监听器就像一双耳朵,应用中发生了某些事件,而这些事件发生之后,我就要做一些处理 。

监听器也提供了好几个接口,用来监听不同的事件:

ServletContextListener接口      -------监听web应用的启动和关闭  

ServletContextAttributeListener接口    -------监听application对象(ServletContext类的实例对象)内的值得变化  

ServletRequestListener接口                --------监听request对象(ServletRequest类的实例对象)

ServletRequestAttributeListener接口      -----监听request对象(ServletRequest类的实例对象)内值的变化

HttpSessionListener接口                      ------监听session对象(HttpSession类的实例对象)的开始和结束

HttpSessionAttribute接口                      -----监听session对象(HttpSession类的实例对象)中值的变化

每个接口中都定义了若干方法   ,用于在某个事件被监听到之后自动调用,也是通过Listener实例对象调用方法实现的 。Listener实例对象和Filter实例对象,都是在web应用被加载时创建的,这点不同与servlet,因为servlet实例对象的创建根据配置不同,有两个时间点去创建。

Listener的配置  

相对于Filter与Servlet来说,Listener的配置最简单 。

原文地址:https://www.cnblogs.com/wangliyue/p/4113032.html