观察者设计模式

从现实世界来说,我们每一个人都是观察者:

被观察者会发出一些信息,观察者接收到这些信息之后,或做出相应的反应,观察者会被被观察者发出的信息所影响。

观察者设计模式设计了"一对多的"关联关系。观察者和被观察者,在java编程中表示具有某一类功能的对象。用接口表示。

   

监听器设计模式:

是观察者设计模式的一种实现。并不是23 种设计模式之一。

   

监听器==》观察者

被监听对象==》被观察者

被监听的状态被定义为一个对象,称为事件。

被监听对象称为事件源

对监听器的通知称为触监听器

 

   

   

   

Servlet 规范中的监听器(8个)

他们分别监听的对象是:request session servletContext (也就是说事件源是这三个)

触发这8个监听器的是这三个对象的添加 删除 修改 创建销毁 以及session的钝化和活化

监听器必须在 web.xml中对其注册

(1)ServletRequestListener

两个方法:

requestDestroyed(ServletRequestEvent sre)

requestInitialized(ServletRequestEvent sre)

   

Eg:

首先定义一个类MyRequestListener 实现ServletRequestListener 接口

然后在 web.xml中注册

<listener>

        <listener-class>com.csu.servletListener.MyRequestListener</listener-class>

</listener>

   

   

(2)servletRequestAttributeListener

有三个方法

//当向 request域中添加属性的时该方法会执行

public void attributeAdded(ServletRequestAttributeEvent srae)

   

// requset中删除属性的时候 该方法会执行

public void attributeRemoved(ServletRequestAttributeEvent srae)

   

//当 重置request中的属性的时候 会执行

public void attributeReplaced(ServletRequestAttributeEvent srae)

   

(3)HttpSessionListener

主要是用于session 的创建和销毁,有两个方法:

sessionCreated(HttpSessionEvent se) //session被创建的

sessionDestroyed(HttpSessionEvent se)//session 被销毁的

   

(4) HttpSessionAttributeListener

完成对session 域属性空间的添加修改删除等操作。的监听

主要有三个方法:

attributeAdded(HttpSessionBindingEvent se)//向session域中添加

attributeRemoved(HttpSessionBindingEvent se)//移除session 域中

attributeReplaced(HttpSessionBindingEvent se)//替换session域中的东西

   

(5)ServletContextListener

监听servletContext 的创建于销毁。

servletContext 在应用中只有一个,在服务器启动的时候创建的,servletContext 的生命周期和整个应用的生命周期相同。所以当项目重新部署,或者是服务器关闭才可以 销毁servletContext

有两个方法:

ContextInitialized(ServletContextEvent ev)//初始化ServletContext

ContextDestoryed(ServletContextEvent ev)//销毁ServletContext的时候

   

(6)ServletContextAttributeListener

attributeAdded(ServletContextEvent scae)//向servletContext域中添加

attributeRemoved(ServletContextEvent scae)//移除servletContext 域中

attributeReplaced(ServletContextEvent scae)//替换servletContext域中的东西

   

(7)HttpSessionBindingListener

两个方法

valueBound() //绑定

valueUnbound()//解绑

他的事件源不是session 而是实体类。

这个比较特别,这个不需要再 web.xml中注册。而且这个是 实体类实现HttpSessionBindingListener。

有两个方法:

Eg:

package com.csu.beans;

   

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionBindingListener;

//是实体类 实现这个接口。

//该监听器是不需要注册的。

public class Student implements HttpSessionBindingListener {

   

private String name;

private Integer age;

   

public String getName() {

return name;

}

   

public void setName(String name) {

this.name = name;

}

   

public Integer getAge() {

return age;

}

   

public void setAge(Integer age) {

this.age = age;

}

   

public Student() {

super();

}

   

public Student(String name, Integer age) {

super();

this.name = name;

this.age = age;

}

   

//当当前类的对象绑定到session时(放入到session 域中的时候)

@Override

public void valueBound(HttpSessionBindingEvent event) {

System.out.println("student 对象放入到session域中的时候");

System.out.println(event.getName()+event.getValue());

}

   

//当当前对象与session解绑(从session域中删除的时候)的时候,会触发该方法的执行

@Override

public void valueUnbound(HttpSessionBindingEvent event) {

System.out.println("student 对象从session域中移除的时候的时候");

System.out.println(event.getName()+event.getValue());

}

   

}

   

   

(8) HttpSessionActivactionListener

事件源不是session 而是实体类

该监听器,监听在session中存放的指定类型对象的钝化和活化。

钝化:就是session中的对象写入到硬盘。

活化:就是将硬盘中的东邪,读入内存

Eg:

//不需要注册,是实体类实现的HttpSessionActivationListener接口。同时还要实现Serializable接口。

public class Person implements HttpSessionActivationListener,Serializable {

private String name;

private int age;

   

   

public String getName() {

return name;

}

   

public void setName(String name) {

this.name = name;

}

   

public int getAge() {

return age;

}

   

public void setAge(int age) {

this.age = age;

}

   

public Person() {

super();

}

   

public Person(String name, int age) {

super();

this.name = name;

this.age = age;

}

   

   

   

@Override

public String toString() {

return "Person [name=" + name + ", age=" + age + "]";

}

   

//钝化当前类的对象被钝化时,

@Override

public void sessionWillPassivate(HttpSessionEvent se) {

System.out.println("person 将要被钝化");

}

   

//session 被活化了,对象被活化。

@Override

public void sessionDidActivate(HttpSessionEvent se) {

System.out.println("student 已经被活化");

}

   

}

   

   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值