博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet监听器统计在线人数
阅读量:4677 次
发布时间:2019-06-09

本文共 3891 字,大约阅读时间需要 12 分钟。

监听器的作用是监听Web容器的有效事件,它由Servlet容器管理,利用Listener接口监听某个执行程序,并根据该程序的需求做出适应的响应。

例1 应用Servlet监听器统计在线人数。

(1)创建UserInfoList.java类文件,主要是用来存储在线用户和对在线用户进行具体操作。该文件的完整代码如下:

package com.cn.gao;import java.util.Vector;public class UserInfoList {    private static UserInfoList user = new UserInfoList();    private Vector vector = null;    /*     * 利用private调用构造函数,防止被外界产生新的instance对象     */    public UserInfoList(){        this.vector = new Vector();    }        //外界使用的instance对象    public static UserInfoList getInstance(){        return user;    }        //增加用户    public boolean addUserInfo(String user){        if(user!=null){            this.vector.add(user);            return true;        }else{            return false;        }    }        //获取用户列表    public Vector getList(){        return vector;    }        //移除用户    public void removeUserInfo(String user){        if(user!=null){            vector.removeElement(user);        }    }}

(2)创建UserInfoTrace.java类文件,主要实现valueBound(HttpSessionBindingEvent arg0)和valueUnbound(HttpSessionBindingEvent arg0)两个方法。当有对象加入session时,valueBound()方法会自动被执行;当有对象从session中移除时,valueUnbound()方法会被自动执行,在valueBound()和valueUnbound()方法中都加入了输出信息的功能,可使用户在控制台中更清楚地了解执行过程。该文件的完整代码如下:

 

package com.cn.gao;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;public class UserInfoTrace implements HttpSessionBindingListener {    private String user;    private UserInfoList container = UserInfoList.getInstance();        public UserInfoTrace(){        user = "";    }        //设置在线监听人员    public void setUser(String user){        this.user = user;    }        //获取在线监听    public String getUser(){        return this.user;    }        public void valueBound(HttpSessionBindingEvent arg0) {        System.out.println("上线"+this.user);    }    public void valueUnbound(HttpSessionBindingEvent arg0) {        System.out.println("下线"+this.user);        if(user!=""){            container.removeUserInfo(user);        }    }}

 

(3)创建index2.jsp页面文件,用于用户登录,该页面的关键代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'index2.jsp' starting page        
在线系统

 

 

(3)创建showUser.jsp页面文件,在页面中设置session的setMaxInactiveInterval()为10秒,这样可以缩短session的生命周期。该页面的关键代码如下:

 

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ page import="com.cn.gao.*" %><%UserInfoList list = UserInfoList.getInstance();UserInfoTrace ut = new UserInfoTrace();String name=request.getParameter("user");ut.setUser(name);session.setAttribute("list",ut);list.addUserInfo(ut.getUser());session.setMaxInactiveInterval(10);%>         My JSP 'showUser.jsp' starting page        

在线用户名单

当用户单击“登录”按钮,就会进入到统计在线人数的界面。

转载于:https://www.cnblogs.com/gaopeng527/p/4438663.html

你可能感兴趣的文章
简单反爬虫技术介绍
查看>>
UITableView详解
查看>>
HDU1671——前缀树的一点感触
查看>>
codves——5960 信使
查看>>
BigDecimal用法详解
查看>>
初识kafka
查看>>
记一次Linux服务器top命令us负载很高,但是找不到高负载进程,引起服务器频繁重启的错误,内核升级...
查看>>
CentOS6 配置网络yum源
查看>>
RabbitMQ 通信过程
查看>>
【转载】Xcode和模拟器的快捷键汇总
查看>>
IOS管理文件和目录
查看>>
13. Roman to Integer【leetcode】
查看>>
CodeForces999A-Mishka and Contest
查看>>
u-boot下载模式LCD显示图片修改方法(基于TQ2440)
查看>>
本人博客目录 [实时更新]
查看>>
循序渐进学.Net Core Web Api开发系列【17】:.Net core自动作业之Hangfire
查看>>
一款基于Vue的扩展性组件库 VV-UI
查看>>
数组去重
查看>>
Numba(??)
查看>>
JBPM4.4+SSH 整合配置及完整实例
查看>>