监听器Listener-session统计在线人数和GUI

import javax.servlet.*;
import javax.servlet.http.*;
//统计在线人数:用session最方便
public class Listener implements HttpSessionListener {

    public Listener() {
    }

    @Override
    //一旦创建Session就会触发一次这个事件
    public void sessionCreated(HttpSessionEvent se) {
        /* Session is created. */
        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);
        }
        //装箱拆箱的操作务必细看,Integer是int的封装类,后面会附上两者的区别
        ctx.setAttribute("OnlineCount", onlineCount);
    }

    //一旦销毁Session就会触发一次这个事件
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        /* Session is destroyed. */
    }
}

Integer和int区别
监听器只需要注册无需映射:

    <listener>
        <listener-class>com.sunsplanter.listener.Listener</listener-class>
    </listener>

index.jsp页面简单编辑输出:

  <h1>当前有 <span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%></span> 在线</h1>

运行后发现控制台输出3个sessionid,页面显示3个人在线,视频解释说Tomcat启动的时候会连接,连接有可能失败但session已经存在了所以会显示3个,重新部署即可解决,但问题是每次重启服务器都是3个,巧合得让人迷惑,此处未能理解.

因为GUI和Listener关联度比较高,练习以下GUI的使用,新建一个类名为TestPanel,内容如下:

import java.awt.*;

public class TestPanel {
    public static void main(String[] args) {
        Frame frame = new Frame("Hello");//新建一个窗体
        Panel panel = new Panel(null);//新建一个面板

        frame.setLayout(null);//设置窗体的布局
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(0,0,255));//s设置背景颜色
        panel.setBounds(50,300,300,300);
        panel.setBackground(new Color(0,255,0));

        frame.add(panel);

        frame.setVisible(true);
    }
}

运行后发现无法关闭,因为没有设置监听事件,我们增加以下代码:

       frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);//0代表正常终止,1代表异常终止
                System.out.println("Closing");
            }
        });

就可以正常关闭.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值