JavaWeb学习笔记——监听器详解

知识概要:

1.监听器下例子举例

2.Servlet规范中的监听器

3.

4.

1. 监听器下例子举例说明:

/*

Frame:事件源。发生事件的对象

WindowListener:监听器。(对应着事件源的某些内容)

WindowEvent:事件对象。封装事件源

*/

public class FrameDemo {

public static void main(String[] args) {

Frame f = new Frame("我的小窗");

f.setSize(400, 300);

f.addWindowListener(new WindowAdapter() {//注册具体的监听器

public void windowClosing(WindowEvent e) {

Frame f1 = (Frame) e.getSource();

f1.dispose();

}

});

f.setVisible(true);

}

}

例子二:

Student

package com.itheima.base;

public class Student {

private String name;

private StudentListener listener;

public Student(String name){

this.name = name;

}

public void eat(){

if(listener!=null){

listener.preEat(new StudentEvent(this));

}

System.out.println(name+":开吃");

}

public void study(){

if(listener!=null){

listener.preStudy(new StudentEvent(this));

}

System.out.println(name+":开始学习");

}

public String getName() {

return name;

}

public void addStudentListener(StudentListener listener){

this.listener =  listener;

}

}

StudentListener

StudentEvent

package com.itheima.base;

public interface StudentListener {

void preEat(StudentEvent e);

void preStudy(StudentEvent e);

}

package com.itheima.base;

public class StudentEvent {

private Object source;

public StudentEvent(Object source){

this.source = source;

}

public Object getSource(){

return source;

}

}

studentDemo

public class StudentDemo {

public static void main(String[] args) {

Student s = new Student("张三");

s.addStudentListener(new StudentListener() {

public void preStudy(StudentEvent e) {

Student s1 = (Student)e.getSource();

System.out.println(s1.getName()+",我给你一个香吻,你努力学习");

}

public void preEat(StudentEvent e) {

Student s1 = (Student)e.getSource();

System.out.println(s1.getName()+",我给你一个湿吻,润一下喉咙,好好吃饭");

}

});

s.study();

s.eat();

}

打印结果:

张三,我给你一个香吻,你努力学习

张三:开始学习

张三,我给你一个湿吻,润一下喉咙,好好吃饭

张三:开吃

2.Servlet规范中的监听器

a、监听ServletContext、HttpSession、ServletRequest对象的创建和销毁的监听器。

ServletContextListener:两个方法

HttpSessionListener:两个方法

ServletRequestListener:两个方法

1.ServletContextListene监听器:

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/*

在web.xml中进行监听器注册

<listener>

<listener-class>com.itheima.listener.MyServletContextListener</listener-class>

</listener>

*/

public class MyServletContextListener implements ServletContextListener {

//ServletContext对象创建时就会指定该方法

//ServletContext对象创建时就执行,执行一次:特点

//应用场景:完成系统的初始化。

//Spring框架:就是利用监听器完成Spring容器的初始化的

public void contextInitialized(ServletContextEvent sce) {

System.out.println("ServletContext实例化了");

}

//ServletContext对象销毁时就会指定该方法

public void contextDestroyed(ServletContextEvent sce) {

System.out.println("ServletContext销毁了");

}

}

2.HttpSessionListener:主要可以用来检测网站的访问次数

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class MyHttpSessionListener implements HttpSessionListener {

//监听访问量

public void sessionCreated(HttpSessionEvent se) {

System.out.println(se.getSession()+"创建了");

}

public void sessionDestroyed(HttpSessionEvent se) {

System.out.println(se.getSession()+"销毁了");

}

}

3.ServletRequestListener:两个方法

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

public class MyServletRequestListener implements ServletRequestListener {

//统计某个资源的访问次数

public void requestDestroyed(ServletRequestEvent sre) {

}

public void requestInitialized(ServletRequestEvent sre) {

}

}

b、三个类型对象域属性中增、删、改的监听器(3个)

ServletContextAttributeListener,

HttpSessionAttributeListener,

ServletRequestAttributeListener

c、感知型监听器(2个):监听自己何时被帮到session上,何时解绑了;何时被钝化了,何时被活化了(序列化到某个存储设置中)。

注意:这种监听器不需要注册。某个javabean实现这些接口后就可以监听何时被绑定、解绑或被激活或钝化。

HttpSessionBindingListener:实现该接口的类,能检测自己何时被Httpsession绑定,和解绑

HttpSessionActivationListener:实现该接口的类(要求些javabean必须是实现了Serializable接口的),能监测自己何时随着HttpSession一起激活和钝化。

最新文章

  1. wamp 服务器安装问题 及cmd常用命令 和 php mysql数据库常用cmd命令集
  2. window.hostory(浏览器的历史记录)
  3. dsp28377控制DM9000收发数据——第三版程序,通过外部引脚触发来实现中断接受数据,优化掉帧现象
  4. WINDOWS下绑定ARP绑定网关
  5. 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest E. Equal Digits
  6. [SQL Basics] Indexes
  7. 通过微信企业号发送zabbix报警
  8. MATLAB - 图像基本操作
  9. No.012:Integer to Roman
  10. SLAM学习笔记(1)基本概念
  11. NOIP2004 解题报告
  12. 关于process
  13. response 返回 带双引号 的字符串解决办法 springmvc
  14. js数组反转
  15. Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)
  16. Linux 驱动——Button驱动6(mutex、NBLOCK、O_NONBLOCK)互斥信号量、阻塞、非阻塞
  17. 转:如何在Vue项目中使用vw实现移动端适配
  18. 12.14 Daily Scrum
  19. Windows Server 2008 R2 Enterprise 上用 SqlServer 2008 R2 创建发布出现异常
  20. 客户端与服务器端同步Evernote

热门文章

  1. Spring上传文件,图片,以及常见的问题
  2. JS中的事件&amp;对象
  3. 团队作业4——第一次项目冲刺 tHe LaSt dAy
  4. 201521123088 《Java程序设计》第1周学习总结
  5. 201521123054 《Java程序设计》第13周学习总结
  6. 201521123080《Java程序设计》第10周学习总结
  7. vue webuploader 组件开发
  8. RabbitMQ消息队列之一:RabbitMQ的环境安装及配置
  9. Django查询数据库性能优化
  10. Lodop 动态加载模板,动态加载数据