栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

快速学习JavaWeb中监听器(Listener)的使用方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

快速学习JavaWeb中监听器(Listener)的使用方法

一、监听器介绍

1.1、监听器的概念

 

  监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。

1.2、监听器案例——监听window窗口的事件监听器

package me.gacl.listener.demo;

import java.awt.frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Demo1 {

  
  public static void main(String[] args) {

    frame f = new frame();
    f.setSize(400, 400);
    f.setVisible(true);

    //注册事件监听器
    f.addWindowListener(new WindowListener(){

      public void windowActivated(WindowEvent e) {

      }

      public void windowClosed(WindowEvent e) {

      }

      
      public void windowClosing(WindowEvent e) {
 //通过事件对象e来获取事件源对象
 frame f = (frame) e.getSource();
 System.out.println(f+"窗体正在关闭");
 f.dispose();
      }

      public void windowDeactivated(WindowEvent e) {

      }

      public void windowDeiconified(WindowEvent e) {

      }

      public void windowIconified(WindowEvent e) {

      }

      public void windowOpened(WindowEvent e) {

      }
    });
  }
}

1.3、设计一个可以被别的对象监听的对象

  我们平时做开发的时候,我们是写监听器去监听其他对象,那么我们如果想设计一个对象,让这个对象可以被别的对象监听又该怎么做呢,可以按照严格的事件处理模型来设计一个对象,这个对象就可以被别的对象监听,事件处理模型涉及到三个组件:事件源、事件对象、事件监听器。

  下面我们来按照事件处理模型来设计一个Person对象,具体代码如下:

package me.gacl.observer;

 
public class Person {
   
  private PersonListener listener;

   
  public void eat() {
    if (listener != null) {
      
      listener.doeat(new Event(this));
    }
  }

   
  public void run() {
    if (listener != null) {
      
      listener.dorun(new Event(this));
    }
  }

   
  public void registerListener(PersonListener listener) {
    this.listener = listener;
  }
}

 
interface PersonListener {

   
  void doeat(Event e);

   
  void dorun(Event e);

}

 
class Event {

   
  private Person source;

  public Event() {

  }

  public Event(Person source) {
    this.source = source;
  }

  public Person getSource() {
    return source;
  }

  public void setSource(Person source) {
    this.source = source;
  }
}

  经过这样的设计之后,Peron类的对象就是可以被其他对象监听了。测试代码如下:

package me.gacl.observer;

public class PersonTest {

  
  public static void main(String[] args) {
    //
    Person p = new Person();
    //注册监听p对象行为的监听器
    p.registerListener(new PersonListener() {
      //监听p吃东西这个行为
      public void doeat(Event e) {
 Person p = e.getSource();
 System.out.println(p + "在吃东西");
      }
      //监听p跑步这个行为
      public void dorun(Event e) {
 Person p = e.getSource();
 System.out.println(p + "在跑步");
      }
    });
    //p在吃东西
    p.eat();
    //p在跑步
    p.run();
  }
}

运行结果:

  me.gacl.observer.Person@4a5ab2在吃东西
  me.gacl.observer.Person@4a5ab2在跑步

二、JavaWeb中的监听器

2.1、基本概念

  JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

2.2、Servlet监听器的分类

  在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContext,HttpSession和ServletRequest这三个域对象
  Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:
 •监听域对象自身的创建和销毁的事件监听器。
 •监听域对象中的属性的增加和删除的事件监听器。
 •监听绑定到HttpSession域中的某个对象的状态的事件监听器。 

2.3、监听ServletContext域对象的创建和销毁

  ServletContextListener接口用于监听ServletContext对象的创建和销毁事件。实现了ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。
 •当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。

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

 •ServletContext域对象创建和销毁时机:
    创建:服务器启动针对每一个Web应用创建ServletContext
    销毁:服务器关闭前先关闭代表每一个web应用的ServletContext

 
范例:编写一个MyServletContextListener类,实现ServletContextListener接口,监听ServletContext对象的创建和销毁

  1、编写监听器,代码如下:

package me.gacl.web.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

 
public class MyServletContextListener implements ServletContextListener {

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

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

  2、在web.xml文件中注册监听器

  我们在上面的中讲到,要想监听事件源,那么必须将监听器注册到事件源上才能够实现对事件源的行为动作进行监听,在JavaWeb中,监听的注册是在web.xml文件中进行配置的,如下:



   
 
  index.jsp
 

 
 
   ServletContextListener监听器
   
   me.gacl.web.listener.MyServletContextListener
 



  经过这两个步骤,我们就完成了监听器的编写和注册,Web服务器在启动时,就会自动把在web.xml中配置的监听器注册到ServletContext对象上,这样开发好的MyServletContextListener监听器就可以对ServletContext对象进行监听了。

2.4、监听HttpSession域对象的创建和销毁

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

范例:编写一个MyHttpSessionListener类,实现HttpSessionListener接口,监听HttpSession对象的创建和销毁

  1、编写监听器,代码如下:

package me.gacl.web.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

 
public class MyHttpSessionListener implements HttpSessionListener {

  @Override
  public void sessionCreated(HttpSessionEvent se) {
    System.out.println( se.getSession() + "创建了!!");
  }

  
  @Override
  public void sessionDestroyed(HttpSessionEvent se) {
    System.out.println("session销毁了!!");
  }
}

  2、在web.xml文件中注册监听器


  
   HttpSessionListener监听器
   me.gacl.web.listener.MyHttpSessionListener
 
 
 
   
   1
 

  当我们访问jsp页面时,HttpSession对象就会创建,此时就可以在HttpSessionListener观察到HttpSession对象的创建过程了,我们可以写一个jsp页面观察HttpSession对象创建的过程。

如下:index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>



 
  HttpSessionListener监听器监听HttpSession对象的创建
 

 
    一访问JSP页面,HttpSession就创建了,创建好的Session的Id是:${pageContext.session.id}
 


运行结果如下:

2.5、监听ServletRequest域对象的创建和销毁

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

  ServletRequest域对象创建和销毁时机:
    创建:用户每一次访问都会创建request对象
    销毁:当前访问结束,request对象就会销毁

范例:编写一个MyServletRequestListener类,实现ServletRequestListener接口,监听ServletRequest对象的创建和销毁

  1、编写监听器,代码如下:

package me.gacl.web.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

 
public class MyServletRequestListener implements ServletRequestListener {

  @Override
  public void requestDestroyed(ServletRequestEvent sre) {
    System.out.println(sre.getServletRequest() + "销毁了!!");

  }

  @Override
  public void requestInitialized(ServletRequestEvent sre) {
    System.out.println(sre.getServletRequest() + "创建了!!");
  }
}

  2、在web.xml文件中注册监听器


  
    ServletRequestListener监听器
    me.gacl.web.listener.MyServletRequestListener
  

测试结果如下:

  从运行结果中可以看到,用户每一次访问都会创建request对象,当访问结束后,request对象就会销毁。

  以上就是对监听器的一些简单讲解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/149260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号