前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态网页(监听器)

动态网页(监听器)

作者头像
全栈开发日记
发布2022-05-13 14:10:15
5970
发布2022-05-13 14:10:15
举报
文章被收录于专栏:全栈开发日记

目录:

第一类:用于监听作用域创建和销毁的监听器 1、监听Request作用域创建和销毁 2、监听Session作用域创建和销毁 3、监听ServletContext作用域的创建和销毁 第二类:用于监听作用域中的值创建、删除、修改 4、监听Request作用域中的值被创建、修改、删除 5、监听Session作用域中的值被创建、删除、修改 6、监听ServletContext作用域中的值的创建、修改、删除 第三类:用于监听Session作用域中的数据状态和对象绑定 7、监听对象在session中绑定或移除的事件 8、监听session中绑定的对象的活化和钝化

文章比较长,介意根据目录查阅。

什么是监听器

它的作用与谍战片中的监听器相同,用来监听或监控你干了什么,只不过谍战片中监听对象是人,而动态网页中监听对象是代码。

官方一点的就是:动态网页中的监听器用于监听你想要监听的对象状态发生改变的事件。

必须条件

要实现监听器就必须有三个必须条件,即:

事件源:我们需要监听的对象。

监听器:用于监听事件源状态发生改变的对象。

注册监听器:将事件源和监听器绑定的过程。

八个监听器可以分为三类

前六个监听器都有基于xml和注解两种方式。

1、用于监听作用域创建和销毁的监听器类

01

监听Request作用域创建和销毁

xml方式

创建实现 ServletRequestListener 接口的实现类:

代码语言:javascript
复制
public class RequestListener implements ServletRequestListener {

  //监听request对象销毁的
  @Override
  public void requestDestroyed(ServletRequestEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("request对象销毁");
  }

  //监听request对象创建的
  @Override
  public void requestInitialized(ServletRequestEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("request对象创建");
  }

}

在web.xml中注册监听器:

代码语言:javascript
复制
<listener>
    <listener-class>com.Listeners.RequestListener</listener-class>
</listener>

注解方式:

注解方式只需要在实现类前添加类级别注解 @WebListener,声明该类是一个监听器。

下面演示一次,后面不再演示。

在类前声明类级别注解:

代码语言:javascript
复制
@WebListener
public class RequestListener implements ServletRequestListener {

  //监听request对象销毁的
  @Override
  public void requestDestroyed(ServletRequestEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("request对象销毁");
  }

  //监听request对象创建的
  @Override
  public void requestInitialized(ServletRequestEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("request对象创建");
  }

}

02

监听Session作用域创建和销毁

xml方式

创建实现 HttpSessionListener 接口的实现类:

代码语言:javascript
复制
public class SessionListener implements HttpSessionListener {

  //监听session作用域创建
  @Override
  public void sessionCreated(HttpSessionEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("session对象创建");
  }

  //监听session作用域销毁
  @Override
  public void sessionDestroyed(HttpSessionEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("session对象销毁");
  }

}

在web.xml中注册监听器:

代码语言:javascript
复制
<listener>
    <listener-class>全限定类名</listener-class>
</listener>

注解方式:在实现类前添加类级别注解 @WebListener,声明该类是一个监听器。

03

监听ServletContext作用域的创建和销毁

应用服务器启动时,创建,在停止(正常停止)时销毁。

xml方式

创建实现 ServletContextListener 接口的实现类:

代码语言:javascript
复制
public class ApplicationListener implements ServletContextListener {

  //监听应用销毁
  @Override
  public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("应用销毁");
  }

  //监听应用启动
  @Override
  public void contextInitialized(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("应用启动");
  }

}

在web.xml中注册监听器:

代码语言:javascript
复制
<listener>
    <listener-class>全限定类名</listener-class>
</listener>

注解方式:在实现类前添加类级别注解 @WebListener,声明该类是一个监听器。

2、用于监听作用域中值的创建、修改、删除

04

监听Request作用域中的值被创建、修改、删除

xml方式

创建ServletRequestAttributeListener接口的实现类:

代码语言:javascript
复制
public class RequestAttributeListener implements ServletRequestAttributeListener {

  //监听Request作用域中的值被创建
  @Override
  public void attributeAdded(ServletRequestAttributeEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Request作用域中的值被创建");
  }

  //监听Request作用域中的值被删除
  @Override
  public void attributeRemoved(ServletRequestAttributeEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Request作用域中的值被删除");
  }

  //监听Request作用域中的值被修改
  @Override
  public void attributeReplaced(ServletRequestAttributeEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Request作用域中的值被修改");
  }

}

在web.xml中注册监听器:

代码语言:javascript
复制
<listener>
    <listener-class>全限定类名</listener-class>
</listener>

注解方式:在实现类前添加类级别注解 @WebListener,声明该类是一个监听器。

05

监听Session作用域中的值被创建、删除、修改

xml方式

创建HttpSessionAttributeListener接口的实现类:

代码语言:javascript
复制
public class SessionAttributeListener implements HttpSessionAttributeListener {

  //监听Session作用域中的值被创建
  @Override
  public void attributeAdded(HttpSessionBindingEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Session作用域中的值被创建");
  }

  //监听Session作用域中的值被删除
  @Override
  public void attributeRemoved(HttpSessionBindingEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Session作用域中的值被删除");
  }

  //监听Session作用域中的值被更新
  @Override
  public void attributeReplaced(HttpSessionBindingEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Session作用域中的值被更新");
  }

}

在web.xml中注册监听器:

代码语言:javascript
复制
<listener>
    <listener-class>全限定类名</listener-class>
</listener>

注解方式:在实现类前添加类级别注解 @WebListener,声明该类是一个监听器。

06

监听ServletContext作用域中的值的创建、修改、删除

xml方式

创建ServletContextAttributeListener接口的实现类:

代码语言:javascript
复制
public class ApplicationAttributeListener implements ServletContextAttributeListener {

  //监听ServletContext作用域中的值被创建
  @Override
  public void attributeAdded(ServletContextAttributeEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("ServletContext作用域中的值被创建");
  }

  //监听ServletContext作用域中的值被删除
  @Override
  public void attributeRemoved(ServletContextAttributeEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("ServletContext作用域中的值被删除");
  }

  //监听ServletContext作用域中的值被修改
  @Override
  public void attributeReplaced(ServletContextAttributeEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("ServletContext作用域中的值被修改");
  }

}

在web.xml中注册监听器:

代码语言:javascript
复制
<listener>
    <listener-class>全限定类名</listener-class>
</listener>

注解方式:在实现类前添加类级别注解 @WebListener,声明该类是一个监听器。

3、用于监听session中的数据状态和绑定情况

注意:

① 这一类型的监听器不需要注册,不需要在web.xml中配置,也不需要注解。

② 实现接口的实现类必须是一个实体类。

07

对象在session中绑定或移除的事件

创建HttpSessionBindingListener的实现类(该类必须是一个实体类):

代码语言:javascript
复制
public class SessionBindingListener implements HttpSessionBindingListener {

  private int id;//用户id
  private String user;//用户名
  private String pwd;//用户密码
  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getUser() {
    return user;
  }

  public void setUser(String user) {
    this.user = user;
  }

  public String getPwd() {
    return pwd;
  }

  public void setPwd(String pwd) {
    this.pwd = pwd;
  }

  //监听该对象在Session中被绑定
  @Override
  public void valueBound(HttpSessionBindingEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("SessionBindingListener实体类被绑定到Session");
  }

  //监听该对象在Session中被解除绑定
  @Override
  public void valueUnbound(HttpSessionBindingEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("SessionBindingListener实体类在Session解除绑定");
  }

}

08

监听session中绑定的对象的活化和钝化

绑定到session会中的对象可以被监听到活化和钝化的时间。在VM(虚拟机)之间项目迁移,保留会话(会话序列化到硬盘中),恢复会话(反序列化)。

活化(反序列化):将硬盘中的对象写入到内存中。

钝化(序列化):将内存中的对象写入到硬盘中。

创建Serializable,HttpSessionActivationListener两个接口的实现类(该类必须是一个实体类):

代码语言:javascript
复制
public class Tuser implements Serializable, HttpSessionActivationListener {

  private int id;
  private String user;
  private String pwd;
  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getUser() {
    return user;
  }

  public void setUser(String user) {
    this.user = user;
  }

  public String getPwd() {
    return pwd;
  }

  public void setPwd(String pwd) {
    this.pwd = pwd;
  }

  //监听对象活化,反序列化
  @Override
  public void sessionDidActivate(HttpSessionEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Tuser对象活化");
  }

  //监听对象钝化,序列化
  @Override
  public void sessionWillPassivate(HttpSessionEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Tuser对象钝化");
  }

}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、用于监听作用域创建和销毁的监听器类
  • 2、用于监听作用域中值的创建、修改、删除
  • 3、用于监听session中的数据状态和绑定情况
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档