Filter(过滤器)和Listener(监听器)

Filter

一.过滤器概述

1.过滤器是一个运行在服务端的程序,在Servlet或jsp页面前运行,实现对请求资源的过滤的功能

2.过滤器可附加到一个或多个Servlet或jsp页面上,可以检查请求信息,也可以处理响应信息

3.Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet执行前后实现一些特殊的功能

二.过滤器常用实例

1.自动登录

2.解决全站乱码

3.屏蔽非法文字

4.进行响应数据压缩  等等

三.过滤器的编写流程

1.实现类,需要实现接口 javax.servlet.Filter

2.配置,在web.xml使用<filter>和<filter-mapping>进行配置

四.filter的生命周期:(过滤器从创建到销毁的过程)

1.服务器启动的时候,服务器就会创建过滤器的对象,每次访问被拦截目标资源,过滤器中的doFilter方法就会zhi执行,当服务器关闭的时候,服务器就会销毁Filter对象

2.服务器在启动时执行初始化方法,init

3.访问资源被拦截时执行拦截方法,doFIlter,放行:chain,doFilter(request,response)

4.服务器关闭时执行销毁方法,destroy

Listener

一.监听器概述

监听器是指对整个WEB环境的监听.当被监视的对象发生改变时,立即调用相应的方法进行处理

分类:

在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContextHttpSessionServletRequest这三个域对象
  Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:

  1. 监听域对象自身的创建和销毁的事件监听器。
  2. 监听域对象中的属性的增加和删除的事件监听器。
  3. 监听绑定到HttpSession域中的某个对象的状态的事件监听器。

二.监听器术语

1.事件源:被监听的对象

2.监听器对象:用于监听"事件源"的对象

3.注册(绑定):将"监听器duix对象"注册给"事件源".当"事件源"发生某些行为时,监听对象将被执行;

4.事件:事件源行为的称呼

5.事件对象:在"监听器对象"中获得"事件源"

三.监听器的编写流程

1.bian编写监听器实现类,需要实现指定的接口

2.在web.xml文件配置监听器(部分监听不用配)<listener>

四.javaEE规范规定了8个监听器接口,用于监听不同的WEB对象

1.监听域对象创建与销毁

2.监听域对象属性变更(添加,替换,删除)

3.监听session作用域特殊javabean

五.域对象本身

1.ServletContextListener接口用于监听ServletContext对象的创建和销毁事件。实现了ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。

当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。

当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。

2.HttpSessionListener 接口用于监听HttpSession对象的创建和销毁
创建一个Session时,激发sessionCreated (HttpSessionEvent se) 方法
销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。

3.ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁
Request对象被创建时,监听器的requestInitialized(ServletRequestEvent sre)方法将会被调用
Request对象被销毁时,监听器的requestDestroyed(ServletRequestEvent sre)方法将会被调用

六.域对象属性

域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。

这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。

attributeAdded 方法

  当向被监听对象中增加一个属性时,web容器就调用事件监听器的attributeAdded方法进行响应,这个方法接收一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象
  各个域属性监听器中的完整语法定义为:

1 public void attributeAdded(ServletContextAttributeEvent scae)
2 public void attributeReplaced(HttpSessionBindingEvent  hsbe)
3 public void attributeRmoved(ServletRequestAttributeEvent srae)

attributeRemoved 方法

  当删除被监听对象中的一个属性时,web容器调用事件监听器的attributeRemoved方法进行响应
  各个域属性监听器中的完整语法定义为:

1 public void attributeRemoved(ServletContextAttributeEvent scae)
2 public void attributeRemoved (HttpSessionBindingEvent  hsbe)
3 public void attributeRemoved (ServletRequestAttributeEvent srae)

attributeReplaced 方法

  当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的attributeReplaced方法进行响应
  各个域属性监听器中的完整语法定义为:

1 public void attributeReplaced(ServletContextAttributeEvent scae)
2 public void attributeReplaced (HttpSessionBindingEvent  hsbe)
3 public void attributeReplaced (ServletRequestAttributeEvent srae)

猜你喜欢

转载自blog.csdn.net/m0_37167369/article/details/81274964