JavaWeb三大组件之-Listener详述

Listener:监听器

监听器:

  • 它是一个接口,内容由我们来实现;
  • 它需要注册,例如注册在按钮上!
  • 监听器中的方法,会在特殊事件发生时被调用!

观察者模式:

  • 事件源;
    – 小偷
  • 事件;
    – 偷东西
  • 监听器;
    – 警察
    – 监听器中的方法:抓捕

JavaWeb中的监听器

  • 事件源:三大域! : ServletContext、HttpSession、ServletRequest
  1. ServletContext
  • 生命周期监听:
    ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
    void contextInitialized(ServletContextEvent sce):创建Servletcontext时
    void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时
  • 属性监听:
    ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。
    void attributeAdded(ServletContextAttributeEvent event):添加属性时;
    void attributeReplaced(ServletContextAttributeEvent event):替换属性时;
    void attributeRemoved(ServletContextAttributeEvent event):移除属性时;
     
  1. HttpSession
  • 生命周期监听:
    HttpSessionListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
    void sessionCreated(HttpSessionEvent se):创建session时
    void sessionDestroyed(HttpSessionEvent se):销毁session时
  • 属性监听:
    HttpSessioniAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。
    void attributeAdded(HttpSessionBindingEvent event):添加属性时;
    void attributeReplaced(HttpSessionBindingEvent event):替换属性时
    void attributeRemoved(HttpSessionBindingEvent event):移除属性时

 

  1. ServletRequest
  • 生命周期监听:
    ServletRequestListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
    void requestInitialized(ServletRequestEvent sre):创建request时
    void requestDestroyed(ServletRequestEvent sre):销毁request时
  • 属性监听:ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。
    void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
    void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
    void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时

JavaWeb中完成编写监听器:

  1. 写一个监听器类:要求必须去实现某个监听器接口;
  2. 注册,是在web.xml中配置来完成注册!
例:
public class MyServletContextListener implements ServletContextListener {

	public void contextDestroyed(ServletContextEvent evt) {
		System.out.println("销毁ServletContext对象");
	}

	public void contextInitialized(ServletContextEvent evt) {
		System.out.println("创建ServletContext对象");
	}
}

感知监听(感知自身状态的变化)

– HttpSessionBindingListener
– HttpSessionActivationListener

还有两个与HttpSession相关的特殊的监听器,这两个监听器的特点如下:

  • 不用在web.xml文件中部署;
  • 这两个监听器不是给session添加,而是给Bean添加。即让Bean类实现监听器接口,然后再把Bean对象添加到session域中。

下面对这两个监听器介绍一下:

HttpSessionBindingListener:当某个类实现了该接口后,可以感知本类对象添加到session中,以及感知从session中移除。例如让Person类实现HttpSessionBindingListener接口,那么当把Person对象添加到session中,或者把Person对象从session中移除时会调用下面两个方法:

public void valueBound(HttpSessionBindingEvent event):当把监听器对象添加到session中会调用监听器对象的本方法;
public void valueUnbound(HttpSessionBindingEvent event):当把监听器对象从session中移除时会调用监听器对象的本方法;

HttpSessionActivationListener:Tomcat 会在 session 长时间不被使用时钝化 session 对象,所谓钝化 session,就是把 session 通过序列化的方式保存到硬盘文件中。当用户再使用 session 时,Tomcat 还会把钝化的对象再活化 session,所谓活化就是把硬盘文件中的 session 在反序列化回内存。当 session被 Tomcat 钝化时,session 中存储的对象也被纯化,当 session 被活化时,也会把 session 中存储的对象活化。如果某个类实现了HttpSessionActiveationListener接口后,当对象随着 session 被钝化和活化时,下面两个方法就会被调用:

public void sessionWillPassivate(HttpSessionEvent se):当对象感知被活化时调用本方法;
public void sessionDidActivate(HttpSessionEvent se):当对象感知被钝化时调用本方法;

配置Tomcat钝化session的参数

把下面配置文件放到tomcat\conf\catalina\localhost目录下!文件名称为项目名称。

<Context>
	<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
		<Store className="org.apache.catalina.session.FileStore" directory="mysession"/>
	</Manager>
</Context>


maxIdleSwap : 闲置超过此时间(min)被钝化
directory   : 钝化后的保存目录
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值