Java三大组件
Servlet 服务程序
Listener 监听器
Filter 过滤器
1、Listenner: 监听器
1.初次相见:AWT ActionListener、
2.二次相见:SAX xml解析方式
3.今天内容
监听器特点:
1)监听器都是接口,接口内的代码内容需要自己实现
2)需要注册,eg:初注册在按钮上
btn.addActionListener(new ActionListener() {}
3)监听器中的方法在特殊事件发生时被调用
观察者:
1)事件源 eg:button
2)事件 :监听器内方法的参数对象,用来触发相应方法
3)监听器
监听器中含有一个或多个方法
监听器监听事件源,,当事件源引发事件时,监听器会相应触发自身对应方法。
eg:
// btn:为事件源,被监视
// .addActionListener(); 为注册,将监听器注册在事件源上
// ( new ActionListener(){} ); :监听器
btn.addActionListener(new ActionListener() {
// actionPerformed :监听器方法
//ActionEvent : 为事件对象
public void actionPerformed(ActionEvent evt) {
System.out.println("hello");
}
});
Java图形化(使用监听器)代码
public class Frame {
public static void main(String[] args) {
//创建图形界面框架
JFrame frame = new JFrame();
//设置框架大小
frame.setSize(300, 200);
//设置框架位置
frame.setLocation(200, 200);
//设定为流式布局管理器
frame.setLayout(new FlowLayout());
//设置窗口"❌"默认值为程序关闭,而不是隐藏窗口
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//创建按钮
JButton btn = new JButton("确定");
//添加按钮进框架
frame.add(btn);
//为按钮设定监听器
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println("hello");
}
});
//显示图形化界面
frame.setVisible(true);
}
}
2、JavaWeb中的监听器(共八个):
事件源: 三大域。
包含六个监听器(三个生命周期监听,三个属性监听 )。
1)ServletContext
1.生命周期监听:ServletContextListener //在ServletContext创建或销毁时完成的
两个方法:
1)void contextInitialized(ServletContextEvent sce):
创建Servletcontext时
2)void contextDestroyed(ServletContextEvent sce):
销毁Servletcontext时
2.属性监听:ServletContextAttributeListener
三个方法:
1)void attributeAdded(ServletContextAttributeEvent event):
添加属性时调用
2)void attributeReplaced(ServletContextAttributeEvent event):
替换属性时调用
3)void attributeRemoved(ServletContextAttributeEvent event):
移除属性时调用
2)HttpSession
3.生命周期监听:HttpSessionListener //在Session创建或销毁时完成的
两个方法:
1)void sessionCreated(HttpSessionEvent se):创建session时调用
2)void sessionDestroyed(HttpSessionEvent se):销毁session时调用
4.属性监听-- HttpSessionAttributeListener
1)void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
2)void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
3)void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时
3)ServletRequest
5.生命周期监听-- ServletRequestListener //在Request创建或销毁时完成的
1)void requestInitialized(ServletRequestEvent sre):创建request时
2)void requestDestroyed(ServletRequestEvent sre):销毁request时
6.属性监听-- ServletRequestAttributeListener
1)void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
2)void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
3)void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时
三大域中,监听内容相同,方法内容相同。只有方法名不同
以上所有的属性监听都有的两个方法:
.getName(); 和 .getValue();
事件对象总结:
1)ServletContextEvent:
.getServletContext(); 返回值为ServletContext
2)HttpSessionEvent
.getSession(); 返回值为HttpSession
3)ServeltRequest:
.getServletContext(); 返回值为ServletContext
.getServletRequest(); 返回值为ServletRequest
在JavaWeb中完成编写三大域监听器
步骤:
1)写一个监听器类
要求:必须实现某个监听器接口
2)注册
在web.xml中配置完成注册。
简单示例:
/**
* ServletContext生死监听
* @author 一万年行不行
*
* 可以在此监听器下存放一些tomcat启动时就要完成的代码
*/
public class AListener implements ServletContextListener {
//出生后立即调用的方法
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("我出生了");
}
//销毁前调用的方法
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("我要销毁了");
}
}
//在web.xml中配置
<listener>
<listener-class>web.listener.AListener</listener-class>
</listener>
7.感知监听(都与HttpSession相关):
特点:
1)是添加在JavaBean上的,而不是三大域
2)都不需要在web.xml中注册
3)两个方法:在对象被添加到或移除出Session时触发
public class User implements HttpSessionBindingListener {
重写感知方法。
@Override //此方法在对象被添加到Session时触发
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("啊~,session添加了我!");
}
@Override //此方法会在对象被移除出Session时触发
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("啊~,session抛弃了我!");
}
}
8.HttpSessionActivationListener
钝化 -- 将实体存储到硬盘中(序列化)
活化 -- 将硬盘中的实体读取到内存中(反序列化)
做法:
1)配置Tomcat钝化session的参数,
//把下面配置文件放到tomcat\conf\catalina\localhost目录下!文件名称为项目名称。
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
//最大maxIdleSwap=1
<Store className="org.apache.catalina.session.FileStore" directory="mysession(文件目录)"/>
</Manager>
</Context>
2)访问项目的index.jsp页面,这会使Tomcat创建Session对象,然后等待一分钟后(因为maxIdleSwap="1"),
3)查看Tomcat\work\Catalina\localhost\listener\mysession目录下是否会产生文件,
--- 产生了文件,说明钝化session的配置成功,可以开始下一步了。
4)创建Person类,让Person类实现HttpSessionActivationListener和Serializable接口:
public class Person implements HttpSessionActivationListener, Serializable {
public void sessionDidActivate(HttpSessionEvent evt) {
System.out.println("session已经活化");
}
public void sessionWillPassivate(HttpSessionEvent evt) {
System.out.println("session被钝化了!");
}
}