1.监听器概述
1.1什么是监听器?
监听器一般是一个实现特定接口的Java程序,这个程序需要监听另外一个Java对象的属性状态变化(对象的创建,销毁,对象上属性的变化等),当监听的对象发生了上述变化,就会通知监听器,监听器将会调用特定的方法进行处理。
1.2监听器
1事件源:按钮,车
2事件:按钮被点击,车被偷
3监听器:listener、警察
1.3监听器的特点
(1)通常是一个接口,其中的内容由开发人员来实现
(2)通常需要将监听器注册到事件源上
(3)监听器中的方法会在特定的事件触发时执行
例子:按钮被点击
package listener;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ListenerDemo {
//创建一个窗口,在窗口中添加一个按钮,按钮点击时,在JLabel输出helloword
public static void main(String[] args) {
//1.创建一个窗口(JFrame)
JFrame frame=new JFrame("监听器例子");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//2.设置窗口的位置和大小
frame.setLocation(500, 250);
frame.setSize(300, 250);
//3.创建一个JLable和按钮
final JLabel label=new JLabel("未点击");
JButton btn=new JButton("点我!");
//5.将按钮添加到窗口中
frame.add(label);
frame.add(btn);
//6.创建一个监听器
ActionListener listener = new ActionListener() {
//事件处理器
public void actionPerformed(ActionEvent e) {
label.setText("HelloWord");
System.out.println("HelloWord");
}
};
/**
* 事件源:按钮
* 事件:按钮被点击
* 监听器:Listener
* 将监听器注册到按钮(事件源)上,监听器将会一直监听(监视)按钮的状态变化,一旦按钮被
* 点击(事件发生),将会通知监听器,监听器将会调用特定的方法处理"按钮被点击"
* 事件
*/
//7.注册监听器(让监听器监听指定的按钮)
btn.addActionListener(listener);
//8.设置窗口为显示(状态)
frame.setVisible(true);
}
}
2.2 开发监听器
2.2.1开发监听器的步骤
(1)写一个类(比如:MyServletContextListener),实现对应的监听器接口(如:ServletcontextListener)
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
*监听器类:实现ServletContext域对象的生死监听器
*用于监听(监视)ServletCotext对象的创建和销毁
*/
public class MyServletContextListener implements ServletContextListener{
/**
* 当ServletContext对象创建时,监听器调用该方法
*/
public void contextInitialized(ServletContextEvent sce) {
System.out.println("我来了。。。"+sce.toString());
}
/**
* 当ServletContext对象销毁时,监听器调用该方法
*/
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("我走了。。。"+sce.toString());
}
}
(2)在web应用的web.xml文件配置监听器完成注册
<!--配置监听器(完成注册) -->
<listener>
<listener-class>listener.MyServletContextListener</listener-class>
</listener>
2.2.2JavaWeb中的监听器(一共有8个)
1.ServletContextListener
ServletContext对象的生命周期监听器,其中提供两个方法,一个是在ServletContext对象创建时调用,另一个是在ServletContext对象销毁时调用!
void contextInitialized(ServletContextEvent sce)
在创建ServletContext对象时调用
void contextDestroyed(ServletContextEvent sce)
在销毁ServletContext对象时地调用
2.HttpSessionListener
void sessionCreated(HttpSessionEvent se)
创建 Session 对象时调用
void sessionDestroyed(HttpSessionEvent se)
销毁 Session对象时调用
3.ServletRequestListener
void requestInitialized(ServletRequestEvent sre)
创建request时调用
void requestDestroyed(ServletRequestEvent sre)
销毁request时调用
4.ServletContextAttributeListener
void attributeAdded(ServletContextAttributeEvent
scae) ;添加属性时调用
void attributeReplaced( ServletContextAttributeEv
ent scae); 替换属性时调用
void attributeRemoved(ServletContextAttributeEv
ent scae) ;删除属性时调用
5.HttpSessionAttributeListener
void attributeAdded(HttpSessionBindingEvent se) ;
添加属性时调用
void attributeReplaced(HttpSessionBindingEvent
se); 替换属性时调用
void attributeRemoved(HttpSessionBindingEvent
se) ;删除属性时调用
6.ServletRequestAttributeListener
void attributeAdded(ServletRequestAttributeEvent
srae)
添加属性时调用
void attributeReplaced(ServletRequestAttributeEv
ent srae)
替换属性时调用
void attributeRemoved(ServletRequestAttributeEv
ent srae)
删除属性时调用
7.HttpSessionBindingListener
valueBound(HttpSessionBindEvent e);
当前JavaBean感知到自己被添加到Session时调
用。
valueUnbound(HttpSessionBindEvent e);
当前JavaBean感知到自己被移出Session时调用
8.HttpSessionActivationListener
sessionWillPassivate(HttpSessionEvent e);
当前JavaBean感知自己随着Session一起钝化时
调用
sessionDidActive(HttpSessionEvent e);
当前JavaBean感知自己随着Session一起活化时
调用