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一起激活和钝化。