监听器
Posted sunny-sml
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监听器相关的知识,希望对你有一定的参考价值。
概念
Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。
监听对象
Request、Session、Application
作用
监听作用域对象request、session、application的创建、销毁和内容的改变。在事件发生之前,之后进行一些处理,比如统计在线人数。
使用
创建一个实现了指定接口的java类
监听request--->ServletRequestListener 监听request对象的创建和销毁
requestInitialized(ServletRequestEvent sre)//创建
requestDestroyed(ServletRequestEvent sre)//销毁
注意:形参可以获取监听的request对象
sre.getServletRequest();
监听request--->ServletRequestAttributeListener 监听request作用域数据的变更。
attributeAdded(ServletRequestAttributeEvent srae)
attributeRemoved(ServletRequestAttributeEvent srae)
attributeReplaced(ServletRequestAttributeEvent srae)
注意:形参可以获取被监听的数据
srae.getName() 获取监听数据的键
srae.getValue() 获取监听数据的值
监听session--->HttpSessionListener 监听session的创建和销毁
sessionCreated(HttpSessionEvent se) 创建
sessionDestroyed(HttpSessionEvent se) 销毁
注意:形参可以获取被监听的session对象
se.getSession();
监听session--->HttpSessionAttributeListener 监听session数据的变更
attributeAdded(HttpSessionBindingEvent event)
attributeRemoved(HttpSessionBindingEvent event)
attributeReplaced(HttpSessionBindingEvent event)
注意:形参可以获取被监听的数据
event.getName() 获取数据的键名
event.getValue() 获取数据的值
监听application--->ServletContextListener 监听application对象的初始化和销毁
contextInitialized(ServletContextEvent sce) 初始化 服务器启动
contextDestroyed(ServletContextEvent sce) 销毁 服务器关闭
注意:形参可以获取当前application对象。
sce.getServletContext();
监听application--->ServletContextAttributeListener 监听数据的变更
attributeAdded(ServletContextAttributeEvent event)
attributeRemoved(ServletContextAttributeEvent event)
attributeReplaced(ServletContextAttributeEvent event)
注意:形参可以获取当前监听的数据
event.getName() 获取数据的键名
event.getValue() 获取数据的值
在web.xml中配置监听器类
<listener>
<listener-class>com.bjsxt.listener.MyListener</listener-class>
</listener>
案例
统计当前在线人数。
统计网页浏览器次数。
案例:用监听器实现网站在线人数
在web.xml中
<!-- 配置监听器 --> <listener> <listener-class>com.bjsxt.listener.MyListener</listener-class> </listener>
在java中
1 public class MyListener implements HttpSessionListener,ServletContextListener{ 2 //session被创建时人数自增 3 @Override 4 public void sessionCreated(HttpSessionEvent se) { 5 //获取ServletContext对象 6 ServletContext sc=se.getSession().getServletContext(); 7 //获取在线统计人数的变量 8 int count=(int) sc.getAttribute("count"); 9 //存储 10 sc.setAttribute("count",++count); 11 12 } 13 //session被销毁时人数自减 14 @Override 15 public void sessionDestroyed(HttpSessionEvent se) { 16 //获取ServletContext对象 17 ServletContext sc=se.getSession().getServletContext(); 18 //获取在线统计人数的变量 19 int count=(int) sc.getAttribute("count"); 20 //存储 21 sc.setAttribute("count",--count); 22 23 } 24 //application对象初始化 25 @Override 26 public void contextInitialized(ServletContextEvent sce) { 27 //获取application 28 ServletContext sc=sce.getServletContext(); 29 //在application对象存储变量用来统计在线人数 30 sc.setAttribute("count",0); 31 } 32 33 @Override 34 public void contextDestroyed(ServletContextEvent sce) { 35 // TODO Auto-generated method stub 36 37 } 38 }
在jsp页面中
<div class="user"> <span>当前在线人数为:${applicationScope.count}</span> </div>
以上是关于监听器的主要内容,如果未能解决你的问题,请参考以下文章
设置onclick侦听器在android中无法从一个片段移动到另一个活动[重复]