javaweb-25:监听器

12、监听器

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

1.编写一个监听器

实现监听器的接口…

public class OnlineCountListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) 	{}
    public void sessionDestroyed(HttpSessionEvent se) {}
    
}

2.web.xml中注册监听器

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

3.看情况是否使用

代码show

OnlineCountListener.java

package com.gongyi.listener;

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

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

    }

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

    /**
     * Session销毁:
     * 1.手工销毁:se.getSession().invalidate();
     * 2.自动销毁,web.xml配置:
     * <session-config>
     *         <session-timeout>1</session-timeout>
 *     </session-config>
     */
}

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>ShowServlet</servlet-name>
        <servlet-class>com.gongyi.servlet.ShowServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ShowServlet</servlet-name>
        <url-pattern>/show</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ShowServlet</servlet-name>
        <url-pattern>/servlet/show</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>com.gongyi.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <!--只要是/servlet的任何请求,会经过这个过滤器-->
        <url-pattern>/servlet/*</url-pattern>
        <!--<url-pattern>/*</url-pattern>-->
    </filter-mapping>
   <!-- 注册监听器-->
    <listener>
        <listener-class>com.gongyi.listener.OnlineCountListener</listener-class>
    </listener>
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>
</web-app>

index.jsp

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

效果图:

在这里插入图片描述

注意:默认重启服务是两个人在线,redeploy是一人在线,好像是tomcat重启时也会创建一个session

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIb8VL9R-1634965779387)(C:\Users\Administrator\Desktop\学习笔记\javaweb\javaweb-25:监听器.assets\image-20211023130336369.png)]

彩蛋

1.一个浏览器访问同一个接口,session是一个

http://localhost:8080/javaweb_filter_war_exploded/

1)360第一次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rgheo8p6-1634965779397)(C:\Users\Administrator\Desktop\学习笔记\javaweb\javaweb-25:监听器.assets\image-20211023130428715.png)]

2)360第二次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFfOw8gl-1634965779401)(C:\Users\Administrator\Desktop\学习笔记\javaweb\javaweb-25:监听器.assets\image-20211023130454563.png)]

3)chrome第一次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-17b7FLGU-1634965779404)(C:\Users\Administrator\Desktop\学习笔记\javaweb\javaweb-25:监听器.assets\image-20211023130551093.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值