zoukankan      html  css  js  c++  java
  • JavaWeb-监听器入门

    监听器

    目录

    OnlineCountListener.java

    package com.huangdekai.JavaWeb.listener;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    /**
     * @Autord: HuangDekai
     * @Date: 2020/4/28 22:41
     * @Version: 1.0
     * @since: jdk11
     */
    public class OnlineCountListener implements HttpSessionListener {
    
        // 创建session监听
        // 一旦创建Session就会触发一次这个事件
        public void sessionCreated(HttpSessionEvent httpSessionEvent) {
            ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
            Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
    
            if (onlineCount == null) {
                onlineCount = 1;
            }
            else{
                onlineCount += 1;
            }
    
            servletContext.setAttribute("OnlineCount",onlineCount);
        }
    
        // 销毁session监听
        public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
            ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
            Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
    
            if (onlineCount == null) {
                onlineCount = 0;
            }
            else {
                onlineCount -= 1;
            }
    
            servletContext.setAttribute("OnlineCount",onlineCount);
        }
    }
    
    

    思路就是从ServeletContext获取一个键为OnlineCount的值,由于Session监听器是每创建一个Session就会触发一次sessionCreated,则当有Session创建时(表示有了一个在线)就对其获取,如果为空,证明没有Session,创建一个,设值为1;如果不为空,证明有Session,键为OnlinCount的值+1。最后将更新的值提交到ServletContext上。

    index.jsp

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

    前端页面将该值展示。

    web.xml

    类似于servlet或者过滤器,要在web.xml中配置路径。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                                   http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0"
             metadata-complete="true">
    
    <listener>
      <listener-class>com.huangdekai.JavaWeb.listener.OnlineCountListener</listener-class>
    </listener>
    
    </web-app>
    

    配置好后启动Tomcat。

    结果

    可以看到,在线人数是2(有其他是3的情况),此处涉及到的问题未曾得解。推测是Tomcat内部的一些关闭浏览器后重启的操作。

    可以通过热部署->刷新的方式消除。

    根据Session的特性,同个浏览器多次访问这个页面:

    用另一个浏览器访问:

    再刷新原来的浏览器:

  • 相关阅读:
    js常用框架原理
    移动端input解决键盘问题 方案1
    jq大体架构。先记录再慢慢剖析
    把图片存储 canvas原生API转成base64
    清除浮动的6中方法
    window.location.hash属性介绍
    前端性能优化之js,css调用优化
    数组中的对象,判断是否有重复值、
    [Python] Pitfalls: Be Careful with os.chdir
    Changing the Color of Linux ls Command 改变Linux的ls命令显示的颜色
  • 原文地址:https://www.cnblogs.com/duzhuan/p/12799429.html
Copyright © 2011-2022 走看看