web的监听器
1) web监听器的引入:
对应的javase
事件源:事件在哪里发生 Jbutton
事件:发生了什么 点击事件(MouseEvent)
监听器:事件发生后要做什么 触发了xx代码(MouseLisener)
2) web监听器的定义:
web开发中,经常使用到一些对象,如servletContext,servletRequest,HttpSession,希望监听这些对象的创建和销毁或属性的增删改行为,可使用监听器监听这些行为。
3)web监听器的分类:
事件源 |
事件 |
监听器 |
ServletContext |
(对象的创建和销毁) ServletContextEvent |
ServletContextLisener |
ServletContext |
(对象属性的增删改) ServletContextAttributeEvent |
ServletContextAttributeLisener |
ServletRequest |
(对象的创建和销毁) ServletRequestEvent |
ServletRequestLisener |
ServletRequest |
(对象属性的增删改) ServletRequestAttributeEvent |
ServletRequestAttributeLisener |
HttpSession |
HttpSessionEvent |
HttpSessionLisener |
HttpSession |
HttpsessionBingdingEvent |
HttpSessionAttributeLisener |
一、ServletContextLisener
作用:用于监听ServletContext对象的创建和销毁
创建:web应用加载时(即web服务器启动的时候)
销毁:web应用重新部署或停止时
应用: 1、初始化数据库(建表) 2、销毁数据库(删表)
开发步骤:
(1) 编写类,实现对应的监听器接口
(2) 在web.xml中配置(注册监听器)
<listener> <listener-class>gz.lulu.a_context.MyServletContextlistener-class> listener> |
二、ServletContextAttributeLisener
作用:用于监听ServletContext属性的增删改
增:setAttribute(”name”,Object);
删:removeAttribute(”name”);
改:setAttribute(”name”,Object);
/*jsp页面 <% application.setAttribute("name", "jack");//增加 application.setAttribute("name", "rose");//修改 application.removeAttribute("name");//删除 %> */ //属性添加 public void attributeAdded(ServletContextAttributeEvent scab) { String name = scab.getName(); Object value = scab.getValue(); System.out.println("属性增加:"+name+"="+value); } //属性删除 public void attributeRemoved(ServletContextAttributeEvent scab) { String name = scab.getName(); Object value = scab.getValue(); System.out.println("属性删除:"+name+"="+value); }
public void attributeReplaced(ServletContextAttributeEvent scab){ String name = scab.getName(); //属性修改后,需要重新获取值 Object value = scab.getServletContext().getAttribute("name"); System.out.println("属性修改:"+name+"="+value); } |
三、ServletRequestLisener
作用:用于监听ServletRuquest对象的创建和销毁
创建:每次请求发出时
销毁:请求完毕时
应用: 1、获取请求相关的数据,共享到jsp页面
客户端的ip地址是:${sessionScope.ip } |
public void requestInitialized(ServletRequestEvent sre) { System.out.println("ServletRequest对象创建了"); HttpServletRequest request = (HttpServletRequest)sre.getServletRequest(); String ip = request.getRemoteHost(); HttpSession session = request.getSession(); session.setAttribute("ip", ip); } |
四、ServletRequestAttributeLisener
作用:用于监听ServletRequest属性的增删改
增:setAttribute(”name”,Object);
删:removeAttribute(”name”);
改:setAttribute(”name”,Object);
<% request.setAttribute("name", "jack"); request.setAttribute("name", "Lily"); request.removeAttribute("name"); %> |
public void attributeReplaced(ServletRequestAttributeEvent srae) { String name = srae.getName(); Object value = srae.getServletRequest().getAttribute("name"); System.out.println("属性修改:"+name+"="+value); }
//属性增加 public void attributeAdded(ServletRequestAttributeEvent srae) { String name = srae.getName(); Object value = srae.getValue(); System.out.println("属性增加:"+name+"="+value); }
public void attributeRemoved(ServletRequestAttributeEvent srae) { String name = srae.getName(); Object value = srae.getValue(); System.out.println("属性删除:"+name+"="+value); } |
七、HttpSessionLisener
作用:用于监听HttpSession对象的创建和销毁
创建:调用request.getSession时
销毁:
(1) 不访问httpseession开始,默认30分钟服务器回收 。
(2) 局部改变回收时间:setMaxInactiveInterval(intinterval)
(3) 全局改变回收时间:
(4)直接销毁:invalidate()
应用: 1、粗略统计在线访客人数
Web.xml <session-config> <session-timeout>1session-timeout> session-config> |
Jsp测试页面 <body> 当前网站的在线访客人数为:${applicationScope.onlineCount } body> |
//演示HttpSession监听器 public class MySessionListener implements HttpSessionListener{ private int onlineCount=1; //HttpSession对象创建时调用 public void sessionCreated(HttpSessionEvent se) { System.out.println("session对象创建了"+se.getSession()); //把onlineCount放到域对象中。 注:这里要使用ServletContext才可以,不能使用HttpSession ServletContext context = se.getSession().getServletContext(); context.setAttribute("onlineCount", onlineCount); onlineCount++; }
|
七、HttpSessionAttributeListener
作用:用于监听HttpSession属性的增删改
增:setAttribute(”name”,Object);
删:removeAttribute(”name”);
改:setAttribute(”name”,Object);
public void attributeAdded(HttpSessionBindingEvent se) { String name = se.getName(); Object value = se.getValue(); System.out.println("增加属性"+name+"="+value); } public void attributeRemoved(HttpSessionBindingEvent se) { String name = se.getName(); Object value = se.getValue(); System.out.println("删除属性"+name+"="+value); } public void attributeReplaced(HttpSessionBindingEvent se) { String name = se.getName(); //重新获取修改后的属性值 Object value = se.getSession().getAttribute("name"); System.out.println("修改属性"+name+"="+value); }
|
应用: 1、用户可以登录系统、退出系统
2、用户登陆后,可查看在线登录用户列表
3、管理员可以踢指定登录用户