17-listener监听器

17-listener监听器

概述

监听器也是我之前一直难以理解的一个东西,一回生二回熟,第二次再听得时候也就能很快接收这个理念了
监听器就是后台的一个一直启动的线程,在监听着它所关注的东西

实践

写一个监听网站当前在线人数的监听器, 只是一个简单的例子,后续需深入研究
SessionCountListener.java


package com.kuang.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 功能描述
 *
 * @since 2022-08-24
 */
public class SessionCountListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer sessionCount = (Integer) context.getAttribute("SessionCount");
        if (sessionCount == null) {
            sessionCount = new Integer(1);
        } else {
            sessionCount += 1;
        }
        context.setAttribute("SessionCount", sessionCount);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSessionListener.super.sessionDestroyed(se);
    }
}

index.jsp

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

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">

    <servlet>
        <servlet-name>s1</servlet-name>
        <servlet-class>com.kuang.servlet.Servlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>s1</servlet-name>
        <url-pattern>/s1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>s1</servlet-name>
        <url-pattern>/servlet/s1</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>f1</filter-name>
        <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>f1</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>com.kuang.listener.SessionCountListener</listener-class>
    </listener>
</web-app>
posted @ 2022-08-24 09:16  Oh,mydream!  阅读(18)  评论(0编辑  收藏  举报