12、监听器

监听器

实现一个监听器的接口;(有N种)

1.编写一个监听器

​ 实现监听器的接口

//统计网站在线人数;统计session
public class OnlineCountListener implements HttpSessionListener {
    //创建session监听;看你的一举一动
    //一旦创建一个session,就会触发一次这个事件
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
        if ( onlineCount == null ) {
            onlineCount = new Integer(1);
        } else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count+1);
        }
        servletContext.setAttribute("OnlineCount",onlineCount);
    }

    //销毁session监听
    //一旦销毁session就会触发一次这个事件
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
        if ( onlineCount == null ) {
            onlineCount = new Integer(0);
        } else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count-1);
        }
        servletContext.setAttribute("OnlineCount",onlineCount);
    }

    /*
    session销毁:
    1.手动销毁   getSession().invalidate();
    2.自动销毁
     */
}

2.web.xml中注册监听器

<listener>
        <listener-class>com.cc.listener.OnlineCountListener</listener-class>
    </listener>
<h1>当前有 <span style="color:blue;"><%=application.getAttribute("OnlineCount")%></span> 人在线</h1>

3.看情况是否使用

先用谷歌浏览器访问

image-20210613124006558

再用Edge浏览器访问

image-20210613124050658

设置自动关闭session后:

<session-config>
        <session-timeout>1</session-timeout>
    </session-config>

image-20210613124215667

posted @ 2021-06-23 23:00  多瑞C  阅读(34)  评论(0)    收藏  举报