监听器的作用是监听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+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index2.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<form action="showUser.jsp" method="post" >
<table align="center">
<tr>
<td align="center" class="2">在线系统</td>
</tr>
<tr>
<td align="center">
<input type="text" name="user"/>
</td>
</tr>
<tr>
<td align="center">
<input type="submit" value="登陆"/>
</td>
</tr>
</table>
</form>
</body>
</html>

(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);
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'showUser.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<form method="post">
<table align="center">
<tr>
<td align="center" class="2">
<h2>在线用户名单</h2>
</td>
</tr>
<tr>
<td align="center">
<textarea rows="8" cols="20"><%
Vector vector=list.getList();
if(vector!=null&&vector.size()>0){
for(int i=0;i<vector.size();i++){
out.println(vector.elementAt(i));
}
}
%>
</textarea>
</td>
</tr>
</table>
</form>
</body>
</html>

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

Servlet监听器统计在线人数的更多相关文章

  1. servlet监听器实现在线人数统计

    一.准备知识 servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. filter:fi ...

  2. Servlet监听器统计网站在线人数

    本节我们利用 Servlet 监听器接口,完成一个统计网站在线人数的案例.当一个用户登录后,显示欢迎信息,同时显示出当前在线人数和用户名单.当用户退出登录或 Session 过期时,从在线用户名单中删 ...

  3. springboot使用HttpSessionListener 监听器统计当前在线人数

    概括: request.getSession(true):若存在会话则返回该会话,否则新建一个会话. request.getSession(false):若存在会话则返回该会话,否则返回NULL ht ...

  4. 使用Session监听器实现统计在线人数

    使用Session监听器实现统计在线人数 1.工作目录结构 包含监听器类和jsp页面 2.session监听器 首先利用session监听器来实现对访问网站时的session计数,当有session创 ...

  5. Servlet监听器——实现在线登录人数统计小例子

    一.概念 servlet监听器的主要目的是给web应用增加事件处理机制,以便更好的监视和控制web应用的状态变化,从而在后台调用相应处理程序. 二.监听器的类型 1.根据监听对象的类型和范围,分为3类 ...

  6. Servlet监听器笔记总结

    监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...

  7. Javaweb统计在线人数的小栗子

    最近在学习Javaweb相关的内容(不黑不吹之前对web开发零基础),下面通过一个统计在线人数的小栗子讲讲Servlet监听器吧 开发环境 eclipse  tomcat 7 先说说这个小栗子的构思: ...

  8. java之Servlet监听器Listener

    常用应用场景:单点登录.统计在线人数 一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响 ...

  9. Java进阶(十三)servlet监听器

    servlet监听器 Listener是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当 增加一个HttpSession时 ...

随机推荐

  1. Maven 仓库之阿里云镜像配置

    每当项目开发中 update Maven Project 的时候,我们会发现那个进度是非常的慢,这也严重阻碍了平日的开发进度.        然而,殊不知阿里云搭建了一个国内镜像 http://mav ...

  2. hdoj2546 饭卡(DP,01背包)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路 首先要判断卡里的钱是不是大于等于5元,如果不足5元,直接输出余额:如果大于等于5元,则先留 ...

  3. centos6 yum 安装nginx 不成功解决办法

    转自  http://wlheihei.com/view/64 [root@51ou.com yum.repos.d]# yum install nginxLoaded plugins: fastes ...

  4. 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式

    [状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...

  5. 在chrome开发者工具中观察函数调用栈、作用域链、闭包

    在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量对象,闭包,this等关键信息的变化.因此,断点调试对于快 ...

  6. python opencv3 图像与原始字节转换

    git: https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy import os &q ...

  7. Sass 基础教程

    0. Sass 文件后缀名 sass 有两种后缀名文件:一种后缀名为 sass,不使用大括号和分号:另一种就是我们这里使用的 scss 文件,这种和我们平时写的 css 文件格式差不多,使用大括号和分 ...

  8. [BZOJ2815][ZJOI2012]灾难(拓扑排序/支配树)

    支配树目前只见到这一个应用,那就不独分一类,直接作为拓扑排序题好了. 每个点向所有食物连边,定义fa[x]为x的支配点,即离x最近的点,满足若fa[x]灭绝,则x也要灭绝. 这样,将fa[x]向x连边 ...

  9. BZOJ 1975: [Sdoi2010]魔法猪学院 大水题 第k短路 spfa

    https://www.lydsy.com/JudgeOnline/problem.php?id=1975 我好像到现在了第k短路都不会写,mdzz. 先spfa求出最短路,然后扫点存各种前置路径已经 ...

  10. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 lct 动态树 splay

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 http://blog.csdn.net/frods/article/details/5224 ...