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

1.什么是监听器?有什么用?
  用于监听某一个事件的发生,监听器的原理就是接口回调。
2.监听器分为三类八种:
三个作用域
request—–HttpServletRequest
session—-HttpSession
application—–ServletContext
第一类:用于监听 三个域对象的创建销毁事件
ServletContextListener
监听ServletContext创建销毁
创建 : 服务器启动为每一个应用创建一个ServletContext实例
销毁: 关闭服务器,或者项目从服务器中移除

ServletRequestListener
监听ServletRequest创建销毁
创建: 只要有请求过来,不管请求什么东西, 服务器都会帮我们创建一个request实例
销毁:当服务器对这次请求作出了响应,那么就销毁了这个实例
HttpSessionListener

监听session的创建销毁
创建: 服务器调用getSession 或者 访问jsp 会创建 session实例
销毁: 会话超时 , 非正常关闭 服务器(正常关闭服务器 ,session会序列化。)

用法:创建监听器,注册监听器
三个用法都一样

1. 定义一个类, 实现对应的接口。
2. 在 web.xml 中 使用<listener> 元素来注册
  <listener> 
  <listener-class>com.unistrong.servlet.Demoservlet</listener-class>
  </listener>

第二类:监听ServletContextAttributeListener

监听ServletContext 域中的属性改变 , 添加 | 替换 | 移除

ServletRequestAttributeListener

监听ServletRequest 域中的属性改变 , 添加 | 替换 | 移除

HttpSessionAttributeListener

监听HttpSession 域中的属性改变 , 添加 | 替换 | 移除

用法一样:

1. 定义一个了类,实现对应的接口
2. 在web.xml中使用listener 注册
3. 对三个域分别作出 添加 | 替换 | 移除的动作。 即可看出变化

第三类:监听httpsession的值改变
  这一类监听器与前两种监听器不太一样。这种监听器无需在web.xml中配置, 只需要让javaBean实现对应的接口即可。

HttpSessionBindingListener

public void valueBound(HttpSessionBindingEvent event) {
    System.out.println("对象被绑定到了session上面去了");
}
public void valueUnbound(HttpSessionBindingEvent event) {
    System.out.println("对象从session中移除了。");

} 

HttpSessionBindingListener 主要监听的是 对象与session域的绑定和解绑的事件

HttpSessionActivationListener

public void sessionWillPassivate(HttpSessionEvent se) {
    System.out.println("对象被钝化了...");
}

public void sessionDidActivate(HttpSessionEvent se) {
    System.out.println("对象被活化了...");

}

HttpSessionActivationListener 监听的是 对象被钝化 和 活化的事件 。

钝化:

正常关闭服务器或者超过了规定时间,那么对象将会被 钝化(序列化)到硬盘上 。

活化:

重新启动服务器, 那么之前钝化的数据将会被活化(反序列化。) ,那么我们在页面上亦可访问。

  Session中通常可以存数据的,那么我们可以把一些长时间不使用的数据给序列化(钝化)到硬盘上 ,等再使用的时候,可以从硬盘反序列化(活化)回来。这样节省了不少内存空间。
1.什么是过滤器?有什么用?
过滤器的作用 : 主要是起到的是拦截作用 , 用于在客户端 请求服务器资源的时候,执行过滤(拦截) 。 如果过滤器放行,那么这个请求才能到达服务器 。 如果过滤器拒绝放行,那么服务器就不会收到这个请求。
2.生命周期?
创建: 服务器启动即创建过滤器实例
销毁:服务器关闭即销毁过滤器实例
3.配置说明?
过滤器要想生效还必须在web.xml中进行配置, 它的配置方式与 servlet的配置方式几乎一样。

  <filter>
    <filter-name>aa</filter-name>
    <filter-class>xx.xx.xx.XXX</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>aa</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

过滤器拦截的是谁, 具体还是看 url-patter的设置。 此处的设置与servlet的设置是一样。

  1. 完全目录匹配 以/开始

    /aa/bb /aa/xx

  2. 目录匹配 以/开始 , 以*结束

    如:/* /aaa/* /aaa/bbb/*

  3. 扩展名匹配 :

    如 : aa.jsp bb.do cc.action

除了以上的配置。还可以使用dispatch来对当前的请求类型进行过滤

REQUEST :默认值,默认过滤器只会拦截请求
FORWARD :过滤器拦截转发
INCLUDE :过滤器拦截包含
ERROR :过滤器拦截全局错误页面的跳转。
4.执行顺序?
1.客户端发送请求,先经过过滤器,如果过滤器放行才能到servlet.
2.如果有多个过滤器,按他们注册的映射顺序进行排队,如果前一个过滤器不放行,后面的过滤器以及servlet不会得到请求。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值