1.什么是监听器? 监听器就是一个java来监听其他java的状态 主要应用在GUI Android 方面
事件源: 轮胎
监听器:胎压报警器
事件源与监听器绑定:安装了胎压报警器的轮胎
事件:一根绣花针
GUI方面的小应用:
package com.com.xuzz.jframe;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class MyFrame extends JFrame {
public static void main(String[] args) {
//1事件源 创建
MyFrame myFrame= new MyFrame();
myFrame.setName("来嘛小哥");
myFrame.setVisible(true);
myFrame.setBounds(0, 0, 200, 200);
//2.创建监听器
//3 事件源与监听器绑定
myFrame.addWindowListener(new MyWindowListener());
}
}
class MyWindowListener implements WindowListener{
@Override
public void windowOpened(WindowEvent e) {
System.out.println("我被打开了");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("我关闭");
MyFrame frame = (MyFrame) e.getSource();
System.out.println(frame.getName());
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("我被关闭了");
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("我被激活了");
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
二.web应用中的监听器
web中的listener和filter是属于servlet规范中的高级技术
web中的listener 分 三类八种。 主要针对3个域对象 servletcontext ,httpsession , servletrequest
三类八种:
一类:监听域对象的创建和销毁 servletcontectlistener HttpSessionListener , ServletRequestListener
二类:监听域对象中属性的变化 ServletContextAttributeListener , HttpSessionAttributeListener , ServletRequestAttributeListener
三类:监听httpsession 中的 javabean 的状态改变(绑定 钝化 活化 解除绑定)
HttpSessionBindingListener
HttpSessionActivationListener
ServletContextListener 代码实践:
package com.xuzz.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Timer;
import java.util.TimerTask;
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
Timer tm = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("我是大帅哥");
}
};
tm.schedule(timerTask, 10000l, 20000l);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
web.xml中:
<listener>
<listener-class>com.xuzz.listener.MyListener</listener-class>
</listener>
二类:
package com.xuzz.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("add something");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("remove something");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("replace something");
}
}
三类:
package com.POJO;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;
import java.io.Serializable;
/*
* 1. session.setAttribute("Student", new Student()); 放值 也就是绑定
*
* 解除
* session. session.removeAttribute("Student");
*
* 1.钝化
* 正常关闭服务器
* 设置 session 的钝化时间 conf 中的 context 配置
*
* 活化
* */
public class Student implements HttpSessionActivationListener, HttpSessionBindingListener, Serializable {
private String name;
private int age;
private int telphone;
public Student(String name, int age, int telphone) {
this.name = name;
this.age = age;
this.telphone = telphone;
}
public Student() {
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", telphone=" + telphone +
'}';
}
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 int getTelphone() {
return telphone;
}
public void setTelphone(int telphone) {
this.telphone = telphone;
}
@Override
public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
}
@Override
public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
}
@Override
public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
//序列化 到硬盘
}
@Override
public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
//反序列化
}
}

2529

被折叠的 条评论
为什么被折叠?



