用监听器根据Session判断服务器有多少人访问 别忘了xml中配置监听器

该文章展示了一个Java实现的HttpSessionListener,用于监听session的创建和销毁。当创建session时,它会在ServletContext中存储并更新访问人数;session销毁时,会相应减少计数。配置在web.xml中,同时设置了session超时时间为1分钟。
摘要由CSDN通过智能技术生成
package com.bai;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*********
//*******************注意之前是通过servletmapping映射然后访问 进入这个类
//现在 不是  因为****我们没有继承httpservlet接口所以不能用mapping ******
//我们没有继承httpservlet接口所以不能用mapping
//我们没有继承httpservlet接口所以不能用mapping
//但是监听器还是要注册的
// 现在是myweb前端直接拿到 context中的counts

//!!!!!!
//服务器处理请求时会产生一个 session  但处理不一定成功 所以可能会产生失败的session  cookie是产生在客户端的
public class ListenerSessionDemo implements HttpSessionListener {
    //每创建一个session都会调用这个方法
    //每创建一个session都会调用这个方法
    //每创建一个session都会调用这个方法
    //每创建一个session都会调用这个方法
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext Context = httpSessionEvent.getSession().getServletContext();
        System.out.println(httpSessionEvent.getSession().getId());
        //httpSessionEvent.getSession()获得该绘画对象 每创建一个session都会调用这个方法 getServletContext获得上下文对象
        // context是最大的上下文 不同的servlet可以在里面存东西


        //Object counts = Context.getAttribute("number");//setattribute的value类型是object 对象类型 不是int


        //这里为了计数方便 改为具体的对象 integer
        Integer counts = (Integer) Context.getAttribute("number");//int的实体类


//获取存在上下文的 键为number的值value
//        if(counts==0)//这里不能是counts=0 因为这里判断的是 一个键为number的键值对是否为空 应该是null判断
//        {
//            counts++;
//        }else {
//            counts=counts+1;
//        }
//        Context.setAttribute("number",counts);
//    }

            if(counts==null)
        {
            counts=new Integer(1);
        }else {
//            counts=counts+1;
                int a=counts.intValue();
                counts=new Integer(a+1);
        }
        Context.setAttribute("number",counts);

    }

    @Override
    //每销毁一个session都会调用这个方法
    //每销毁一个session都会调用这个方法
    //每销毁一个session都会调用这个方法
    //每销毁一个session都会调用这个方法
    //销毁方法有两个:一手动销毁  getsession。invalide
    //自动销毁 web。xlm配置sessionconfig
    //还有 服务器观赏就销毁
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext Context = httpSessionEvent.getSession().getServletContext();//context上下文中的东西 会话结束会销毁
        Integer counts =(Integer) Context.getAttribute("number");
        if(counts!=null)
        {

            int a=counts.intValue();
            counts=new Integer(a-1);
        }
        Context.setAttribute("number",counts);

    }
}

<%--index.jsp--%>
<%@page contentType="text/html;charset=utf-8" %>
<html>
<body>
<h1>当前访问人数为=<%=this.getServletConfig().getServletContext().getAttribute("number")%></h1>
</body>
</html>

//监听器配置 和session自动销毁  web.xml中配置

<session-config>
    <session-timeout>1</session-timeout>
</session-config>
<listener>
    <listener-class>com.bai.ListenerSessionDemo</listener-class>
</listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值