zoukankan      html  css  js  c++  java
  • Javaweb之监听器的使用

    概念:

    监听器,简单理解就是监听观察某个事件的发生情况,当被监听的事件发生,事件发生者(事件源) 就会给注册该事件的监听者(监听器)发送消息,将某些信息传递给监听者,同时监听者也可以获得一份事件对象,根据这个对象可以获得相关属性和执行相关操作。

    监听器模型涉及以下三个对象,模型图如下:

    (1)事件:用户对组件的一个操作,或者说程序执行某个方法,称之为一个事件。

    (2)事件源:发生事件的组件就是事件源,也就是被监听的对象。

    (3)事件监听器(处理器):监听并负责处理事件的方法。

    监听器的实现:

    这里举一个例子,显示网站的当前在线人数。要实现这个功能,需要用到session技术,当用户使用浏览器访问某个网站时,马上就会产生一个session的ID,我们只需要统计session的个数,即可获取到当前正在访问该网站的人数。

    实现显示网站人数的监听器主要有三个步骤:

    • 编写一个监听类,实现的是HttpSessionListener接口;

    • 在index.jsp中获取并显示数据;

    • 在web.xml中注册监听器。

    步骤一:编写一个监听类OnlineCountListener

    package listener;
    ​
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    ​
    //统计网站在线人数,就是统计session
    public class OnlineCountListener implements HttpSessionListener {
    ​
        //创建session监听,一旦创建就会触发一次这个事件
        public void sessionCreated(HttpSessionEvent httpSessionEvent) {
            ServletContext context = httpSessionEvent.getSession().getServletContext();
    ​
            System.out.println(httpSessionEvent.getSession().getId());
    ​
            Integer OnlineCount = (Integer) context.getAttribute("OnlineCount");
    ​
            if (OnlineCount==null){
                OnlineCount = new Integer(1);
            }else {
                int count = OnlineCount.intValue();
                OnlineCount = new Integer(count+1);
            }
    ​
            context.setAttribute("OnlineCount",OnlineCount);
        }
    ​
        //销毁session监听
        public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
            ServletContext context = httpSessionEvent.getSession().getServletContext();
    ​
            Integer OnlineCount = (Integer) context.getAttribute("OnlineCount");
    ​
            if (OnlineCount==null){
                OnlineCount = new Integer(0);
            }else {
                int count = OnlineCount.intValue();
                OnlineCount = new Integer(count-1);
            }
    ​
            context.setAttribute("OnlineCount",OnlineCount);
        }
    ​
        /*
        * session的销毁:
        * 手动销毁:getSession().invalidate();
        * 自动销毁:设置过期*/
    }
    ​

    在index.jsp中获取并显示数据:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <h1>当前有:<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%></span>人在线</h1>
      </body>
    </html>

    在web.xml中注册监听器:

    <!--注册监听器-->
        <listener>
            <listener-class>listener.OnlineCountListener</listener-class>
        </listener>

     

  • 相关阅读:
    关于 转换图片url为base64格式以及base64格式图片地址转为图片文件
    rem布局在Androidwebview中页面错乱
    vue中 $event 的用法--获取当前父元素,子元素,兄弟元素
    vue实现动态改变title
    vue页面跳转-携带参数
    vue项目打包部署生产环境
    Mark区
    kma 2019CSP前刷题记录
    机房的沙茶日常
    2019NOIP算法复健+学习
  • 原文地址:https://www.cnblogs.com/awong18/p/13464035.html
Copyright © 2011-2022 走看看