监听器

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>  

 

以上是关于监听器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用事件侦听器来加载动画片段的循环

JavaFX窗口拖动

设置onclick侦听器在android中无法从一个片段移动到另一个活动[重复]

如何在android中去listview适配器项目点击监听器片段?

java 使手势监听器在片段中可行

片段变得可见时的监听器