JavaWeb中三大组件(Servlet、Filter、listener)之 listtener(监听器)干货详解(十一)
监听器一.简述&入门为什么要学习监听器:复杂特效,项目环境监控。所谓的监听器是指对整个WEB环境的监控,当被监视的对象发生改变时,立即调用相应的方法进行处理。JavaGUI安卓监听器入门:代码:/*** 监控ServletContext对象* 创建* 销毁*/public class MyListener1 implements ServletContextListen...
监听器
一.简述&入门
为什么要学习监听器:复杂特效,项目环境监控。
- 所谓的监听器是指对整个WEB环境的监控,当被监视的对象发生改变时,立即调用相应的方法进行处理。
Java GUI
安卓
监听器入门:
代码:
/**
* 监控ServletContext对象
* 创建
* 销毁
*/
public class MyListener1 implements ServletContextListener {
/**
* ServletContext被创建时,触发该方法
* @param servletContextEvent
*/
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("servletContext被创建了");
}
/**
* ServletContext被销毁时,触发该方法
* @param servletContextEvent
*/
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext被销毁了");
}
}
监听器:JS中
//监听器
function run1(){
alert(“一点就炸”);
}
<input type=”button” value=”点我有惊喜” οnclick=”run1()”/>
应用场景:
- 项目启动时(ServletContext创建),读取硬盘上的数据(初始化)
- 项目关闭时(ServletContext销毁),保存程序中未完成的运算数据
二.监听器术语
专门监听ServletContext对象的创建和销毁
- 事件源:被监听的对象。(ServletContext)
- 事件:事件源所产生的特定动作。(创建和销毁)
- 监听器:处理事件源所产生的事件。(ServletContextListener)
- 注册(绑定)监听器:把监听器和事件源进行绑定。
缺一不可
三.常见8个监听器
JavaWeb常见8个监听器,接口。
- 监听:域对象的创建销毁。
ServletContext:ServletContextListener
HttpSession:HttpSessionListener
HttpServletRequest:ServletRequestListener
这类监听器监听事件:
创建、销毁
这类监听器事件对象:获取事件源对象
- 监听:域对象键值对的 添加、替换、删除
ServletContext:ServletContextAttributeListener
HttpSession:HttpSessionAttributeListener
HttpServletRequest:ServletRequestAttributeListener
这类监听器,专门监听域对象 键值对的: 添加、替换、删除
代码:
Servlet:
/**
* 操作session中的键值对
* @return
*/
public String run1(){
//1、向session中添加一个键值对
getSession().setAttribute("uname","小煌煌");
//2、向session中替换一个键值对
getSession().setAttribute("uname","啊sir");
//3、从session中删除一个键值对
getSession().removeAttribute("uname");
return null;
}
监听器
/**
* 监听HttpSession作用域中,键值对的
* 添加、替换、删除
*/
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
/**
* session中添加一个键值对,就会触发该方法
* @param httpSessionBindingEvent
*/
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("监控到:session中添加了一个键值对");
//1、获取到session对象
HttpSession session = httpSessionBindingEvent.getSession();
//2、获取到触发该方法的键值对
System.out.println("键:"+httpSessionBindingEvent.getName());
System.out.println("值:"+httpSessionBindingEvent.getValue());
}
/**
* session中删除一个键值对,就会触发该方法
* @param httpSessionBindingEvent
*/
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("监控到:session中删除了一个键值对");
//1、获取到session对象
HttpSession session = httpSessionBindingEvent.getSession();
//2、获取到触发该方法的键值对
System.out.println("键:"+httpSessionBindingEvent.getName());
System.out.println("值:"+httpSessionBindingEvent.getValue());
}
/**
* session中替换一个键值对,就会触发该方法
* @param httpSessionBindingEvent
*/
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("监控到:session中替换了一个键值对");
//1、获取到session对象
HttpSession session = httpSessionBindingEvent.getSession();
//2、获取到触发该方法的键值对
System.out.println("键:"+httpSessionBindingEvent.getName());
System.out.println("值:"+httpSessionBindingEvent.getValue());
}
}
小结:
该类监听器。
事件对象:
- 获取事件源对象
- 触发事件的键值对 getName() getValue()
- 监听:特殊JavaBean在session中的状态
HttpSessionBindingListener: 监听某个特殊JavaBean在session中的绑定和解除绑定操作
绑定:设置键值对
解除绑定:删除键值对
特殊:定义一个JavaBean,实现该接口即可
HttpSessionActivationListener:监听某个特殊JavaBean在session中,
钝化(序列化,把内存数据保存到硬盘上)和活化(反序列化,把硬盘数据读取回内存中)
代码:
public class Person implements Serializable,HttpSessionBindingListener {
private String name;
/**
* 当该JavaBean对象被绑定到session上时,触发该方法
* @param httpSessionBindingEvent
*/
@Override
public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("我被绑定到session上了");
//1、获取事件源
HttpSession session = httpSessionBindingEvent.getSession();
//2、获取触发该事件的键值对
String name = httpSessionBindingEvent.getName();
Object value = httpSessionBindingEvent.getValue();
}
/**
* 当该JavaBean对象被从session上解除绑定时,触发该方法
* @param httpSessionBindingEvent
*/
@Override
public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("我被session遗弃了,解除绑定了");
}
}
Servlet:
/**
* 操作特殊JavaBean
* @return
*/
public String run2(){
//1、绑定
Person p1 = new Person("张公子");
getSession().setAttribute("xx",p1);
//2、解除绑定
getSession().removeAttribute("xx");
return null;
}
小结:
1、HttpSessionBindingListener不用在web.xml中注册
2、HttpSessionBindingListener仅能监听自己在session中的状态
HttpSessionAttributeListener:
①需要在web.xml中注册
②监听SESSION中所有的键值对
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!
注: 如果本篇有需要改进的地方或错误,欢迎大神们指定一二~~
更多推荐
所有评论(0)