- 浏览: 156008 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
atgfss:
采用在cookies中保存用户名和sessionid的这种方式 ...
自动登录 -
liumm19870913:
对有输入参数过程的调用
我试过那代码 , 有问题呀,funct ...
oracle 存储过程调用 -
zdsyouxiang:
内容很全面!
认识多任务、多进程、单线程、多线程
使用HttpSessionBindingListener获取在线用户人数及名单
实质:
HttpSessionBindingListener接口有两方需要实现的方法:
public synchronized void valueBound(HttpSessionBindingEvent httpsessionbindingevent)
public synchronized void valueUnbound(HttpSessionBindingEvent httpsessionbindingevent)
Session创建的时候Servlet容器将会调用valueBound方法;Session删除的时候则调用valueUnbound方法.
package pub;
/*
* onLineUser类实现HttpSessionBindingListener接口
* onLineUser类将具有HttpSessionBindingListener接口的特有属性
* 那么HttpSessionBindingListener接口的特有属性是什么呢?
* HttpSessionBindingListener接口具有的两个空函数
* public void valueBound(HttpSessionBindingEvent e)
* public void valueUnBound(HttpSessionBindingEvent e)
*
* onLineUser实现一些方法:获取在线用户数
*
*/
import javax.servlet.http.*;
import java.util.*;
public class onLineUser implements HttpSessionBindingListener {
public onLineUser(){
}
private Vector users=new Vector();
public int getCount(){
users.trimToSize();//调整Vector users的容量为Vector users的大小
return users.capacity();//返回users的容量
}
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for (int i=0;i<users.capacity();i++ )
{
if (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return existUser;
}
public boolean deleteUser(String userName) {
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0;i<users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}
public Vector getOnLineUser()
{
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
if(!existUser(e.getName())){
users.add(e.getName());
//System.out.print(e.getName()+"\t 登入到系统\t"+(new Date()));
//System.out.println(" 在线用户数为:"+getCount());
}
//System.out.println(e.getName()+"已经存在");
}
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
//System.out.print(userName+"\t 退出系统\t"+(new Date()));
//System.out.println(" 在线用户数为:"+getCount());
}
/*public static void main(String[] args)
{
onLineUser onlineUser=new onLineUser();
System.out.println(onlineUser.getCount());
}*/
}
////////////////////////////////////////////////////////////////////
<%
/**这是显示在线用户的jsp文件
文件名为onLineUser.jsp
*/
%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@page import="java.util.*,pub.*"%>
<jsp:useBean id="onlineuser" class="pub.onLineUser" scope="application" />
<html>
<head>
<title>搞定JSP在线人数</title>
</head>
<body>
<center>
<p><h1>登陆成功,欢迎您访问!</h1></p>
</center>
<% session = request.getSession(false); %>
<%
String username=request.getParameter("username");
if (onlineuser.existUser(username)){
out.println("用户<font color=red>"+username+"</font>已经登陆!");
}else{
session.setMaxInactiveInterval(50); //file://Sesion有效时长,以秒为单位
session.setAttribute(username,onlineuser);
out.println("欢迎新用户:<font color=red>"+username+"</font>登陆到系统!");
}
out.println("<br>当前在线用户人数:<font color=red>"+onlineuser.getCount()+"</font><br>");
Vector vt=onlineuser.getOnLineUser();
Enumeration e = vt.elements();
out.println("在线用户列表");
out.println("<table border=1>");
out.println("<tr><td>用户名</td></tr>");
/*while(e.hasMoreElements()){
out.println("<tr><td>");
out.println((String)e.nextElement()+"<br>");
out.println("</td></tr>");
}
下面的方法也是可以的,这两种方法都是可行的,其实Iterator是Enumeration的子类
*/
for(Iterator it=vt.iterator();it.hasNext();){
out.println("<tr><td>");
out.println((String)it.next()+"<br>");
out.println("</td></tr>");
}
out.println("</table>");
%>
<center>
<p>elapsed制作</p>
<p> </p>
<%
out.println("<p><a href='logout.jsp?username="+username+"'>退出系统</a></p>");
%>
</center>
</body>
</html>
///////////////////////////////////////////////////////////////
<%
/**这是用户退出的jsp文件
文件名为logout.jsp
*/
%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="pub.onLineUser,java.util.*" %>
<jsp:useBean id="onlineuser" class="pub.onLineUser" scope="application"/>
<html>
<head>
<title>搞定JSP在线人数</title>
</head>
<body>
<center>
<p><h1>登陆成功,欢迎您访问!</h1></p>
</center>
<%
String username=request.getParameter("username");
if(onlineuser.deleteUser(username)){
out.println(username+"已经退出系统!");
out.println("<script>window.location=\"login.jsp\";</script>");
}else{
out.println(username+"没有登陆到系统!");
}
%>
<center>
<p>elapsed制作</p>
<p> </p>
<p><a href="logout.jsp">退出系统</a></p>
</center>
</body>
</html>
///////////////////////////////////////////
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>测试HttpSessionBindingListener接口</title>
</head>
<body>
<form name="login" method="post" action="onLineUser.jsp">
<input type=text name="username">
<input type=submit name="submit" value="登陆">
</form>
</body>
</html>
实质:
HttpSessionBindingListener接口有两方需要实现的方法:
public synchronized void valueBound(HttpSessionBindingEvent httpsessionbindingevent)
public synchronized void valueUnbound(HttpSessionBindingEvent httpsessionbindingevent)
Session创建的时候Servlet容器将会调用valueBound方法;Session删除的时候则调用valueUnbound方法.
package pub;
/*
* onLineUser类实现HttpSessionBindingListener接口
* onLineUser类将具有HttpSessionBindingListener接口的特有属性
* 那么HttpSessionBindingListener接口的特有属性是什么呢?
* HttpSessionBindingListener接口具有的两个空函数
* public void valueBound(HttpSessionBindingEvent e)
* public void valueUnBound(HttpSessionBindingEvent e)
*
* onLineUser实现一些方法:获取在线用户数
*
*/
import javax.servlet.http.*;
import java.util.*;
public class onLineUser implements HttpSessionBindingListener {
public onLineUser(){
}
private Vector users=new Vector();
public int getCount(){
users.trimToSize();//调整Vector users的容量为Vector users的大小
return users.capacity();//返回users的容量
}
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for (int i=0;i<users.capacity();i++ )
{
if (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return existUser;
}
public boolean deleteUser(String userName) {
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0;i<users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}
public Vector getOnLineUser()
{
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
if(!existUser(e.getName())){
users.add(e.getName());
//System.out.print(e.getName()+"\t 登入到系统\t"+(new Date()));
//System.out.println(" 在线用户数为:"+getCount());
}
//System.out.println(e.getName()+"已经存在");
}
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
//System.out.print(userName+"\t 退出系统\t"+(new Date()));
//System.out.println(" 在线用户数为:"+getCount());
}
/*public static void main(String[] args)
{
onLineUser onlineUser=new onLineUser();
System.out.println(onlineUser.getCount());
}*/
}
////////////////////////////////////////////////////////////////////
<%
/**这是显示在线用户的jsp文件
文件名为onLineUser.jsp
*/
%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@page import="java.util.*,pub.*"%>
<jsp:useBean id="onlineuser" class="pub.onLineUser" scope="application" />
<html>
<head>
<title>搞定JSP在线人数</title>
</head>
<body>
<center>
<p><h1>登陆成功,欢迎您访问!</h1></p>
</center>
<% session = request.getSession(false); %>
<%
String username=request.getParameter("username");
if (onlineuser.existUser(username)){
out.println("用户<font color=red>"+username+"</font>已经登陆!");
}else{
session.setMaxInactiveInterval(50); //file://Sesion有效时长,以秒为单位
session.setAttribute(username,onlineuser);
out.println("欢迎新用户:<font color=red>"+username+"</font>登陆到系统!");
}
out.println("<br>当前在线用户人数:<font color=red>"+onlineuser.getCount()+"</font><br>");
Vector vt=onlineuser.getOnLineUser();
Enumeration e = vt.elements();
out.println("在线用户列表");
out.println("<table border=1>");
out.println("<tr><td>用户名</td></tr>");
/*while(e.hasMoreElements()){
out.println("<tr><td>");
out.println((String)e.nextElement()+"<br>");
out.println("</td></tr>");
}
下面的方法也是可以的,这两种方法都是可行的,其实Iterator是Enumeration的子类
*/
for(Iterator it=vt.iterator();it.hasNext();){
out.println("<tr><td>");
out.println((String)it.next()+"<br>");
out.println("</td></tr>");
}
out.println("</table>");
%>
<center>
<p>elapsed制作</p>
<p> </p>
<%
out.println("<p><a href='logout.jsp?username="+username+"'>退出系统</a></p>");
%>
</center>
</body>
</html>
///////////////////////////////////////////////////////////////
<%
/**这是用户退出的jsp文件
文件名为logout.jsp
*/
%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="pub.onLineUser,java.util.*" %>
<jsp:useBean id="onlineuser" class="pub.onLineUser" scope="application"/>
<html>
<head>
<title>搞定JSP在线人数</title>
</head>
<body>
<center>
<p><h1>登陆成功,欢迎您访问!</h1></p>
</center>
<%
String username=request.getParameter("username");
if(onlineuser.deleteUser(username)){
out.println(username+"已经退出系统!");
out.println("<script>window.location=\"login.jsp\";</script>");
}else{
out.println(username+"没有登陆到系统!");
}
%>
<center>
<p>elapsed制作</p>
<p> </p>
<p><a href="logout.jsp">退出系统</a></p>
</center>
</body>
</html>
///////////////////////////////////////////
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>测试HttpSessionBindingListener接口</title>
</head>
<body>
<form name="login" method="post" action="onLineUser.jsp">
<input type=text name="username">
<input type=submit name="submit" value="登陆">
</form>
</body>
</html>
发表评论
-
java 线程池分析
2015-01-19 17:34 639转自 http://www.cnblogs.com/evilr ... -
JCA 综述
2011-08-25 15:01 1141什么是JCA?它最吸引人 ... -
web.xml 配置详解
2011-08-25 14:14 7071 定义头和根元素 部署描述符文件就像所有XML文件一样, ... -
xpath查询xml
2011-08-23 09:46 2064类似于使用SQL从数据库从查询数据。XPath可以方便的在XM ... -
自动登录
2011-08-17 14:42 1766一、什么是用户自动登录? 对于我们的网站向已注册用户提供 ... -
jad 安装
2011-08-11 14:47 1706Eclipse反编译工具Jad及插件JadClipse配置 ... -
LinkedHashMap 和 HashMap的区别
2011-08-11 10:13 937顾名思义LinkedHashMap是比HashMap多了一个链 ... -
cookie & session
2011-08-10 09:31 545二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小 ... -
java异常处理之throw, throws,try和catch
2011-08-05 10:10 1385转载 http://blog.csdn.net/zhouyon ... -
servlet/jsp线程安全
2011-08-05 09:56 1566转自 http://www.newasp.net/tech/ ... -
Static Nested Class 和 Inner Class
2011-07-26 21:54 1111【转】Static Nested Class 和 Inner ... -
servlet 变量范围
2011-07-02 16:19 853如果要在整个应用范围可以用: request.getSessi ... -
tomcat outofmemoryerror permgen space java heap space
2011-06-28 15:07 1331windows 下 tomcat 虚拟内存 ... -
newInstance() 和 new 有什么区别?
2011-06-25 15:51 740在初始化一个类,生成一个实例的时候;newInstance() ... -
几种类加载方式的区别
2011-06-25 15:41 929虚拟机加载类的途径: 1、Dog dog = new Do ... -
运行时异常与一般异常
2011-06-25 15:39 1068Java提供了两类主要的异常:runtime exceptio ... -
ConcurrentHashMap实现原理
2011-06-25 15:14 1951ConcurrentHashMap是Java 5中 ... -
java集合
2011-06-25 15:00 778转载 当你事先不知道要存放数据的个数,或者你需要一种比数组下标 ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2011-06-25 14:21 812转载http://hi.baidu.com/suofang/b ... -
Servlet中listener和filter的总结
2011-06-25 14:04 1417转载 Listener我是这样理 ...
相关推荐
《梦缘在线人数统计》 在信息技术领域,网站或应用的在线人数统计是评估其活跃度和用户参与度的重要指标。这个项目名为“梦缘在线人数统计”,它可能是一个源代码实现,用于实时或者定期计算并展示用户在特定平台上...
在线人数统计程序是一种常见的Web应用程序功能,用于估算和记录网站同时活跃用户数量。这个"在线人数统计程序.rar"是一个特别设计的解决方案,它无需依赖Global.asa文件,这对于那些不支持或限制使用此文件的免费Web...
在线人数统计是网络应用和服务中一个重要的组成部分,它主要用于了解网站、应用或者服务器在某一时间段内的用户活跃情况。在线人数统计通常涉及到多个技术层面,包括数据采集、处理、存储以及展示。下面将详细阐述...
在线人数统计是网站运营中的重要指标,用于了解网站的活跃度和用户参与度。下面将详细解释这个领域的几个关键知识点: 1. **Web应用程序结构**: - `Global.asax` 文件:这是一个ASP.NET应用程序的全局应用事件...
网页在线人数统计是网站运营和分析中的重要指标,它能够帮助网站管理员了解当前网站的活跃度,优化资源分配,以及调整服务策略。在ASP(Active Server Pages)编程中,我们可以利用Application对象和Session对象来...
Java Web 开发在线人数统计 在线人数统计是 Java Web 开发中一个常见的功能,当一个用户登录后,显示欢迎信息,同时显示出当前在线的总人数和用户名单。当一个用户退出登录或者 Session 超时值发生时,从在线用户...
此外,需要注意的是,基于Session的在线人数统计可能会存在一些问题,例如用户关闭浏览器但未正式登出,此时Session可能会因浏览器关闭而意外结束,导致在线人数统计不准确。为了解决这个问题,可以结合应用服务器的...
ASP.NET Application在线人数统计实例是基于ASP.NET框架开发的一个实用功能,用于实时追踪并展示网站当前的在线用户数量。在互联网应用中,了解系统活跃用户数对于优化用户体验、数据分析以及资源管理都至关重要。本...
【标题】: "基于.NET内置对象的在线人数统计" 【描述】: "本文将探讨如何利用ASP.NET的主要内置对象,尤其是Cookie、Session和Application对象,来实现在线人数的动态统计,以此来跟踪当前站点的访问量。" 【标签...
在线人数统计是网络服务运营中的重要指标,它可以帮助管理者了解网站、应用或游戏等平台的实时活跃用户数量,为优化用户体验、制定营销策略提供数据支持。准确的在线人数统计不仅涉及技术实现,还涵盖多种技术和策略...
在线人数统计程序是Web开发中一个常见的功能,用于实时显示网站当前在线用户的数量。这个程序通常基于服务器端的技术实现,例如JavaServer Pages (JSP)。JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java...
在IT行业中,实时在线人数统计是一项重要的功能,尤其对于Web应用程序和网站来说,它能够帮助运营者了解网站的活跃程度,优化服务,并进行数据分析。在本案例中,我们将讨论如何简单实现一个基于AVAWEB(假设是某种...
Java Web在线人数统计是Web应用程序中常见的需求,用于获取当前网站活跃用户数量。这个功能的实现通常基于HTTP协议的工作机制,特别是对Session的管理和监听。本文将深入探讨如何使用Java Web技术来监听并统计在线...
**JSP 在线人数统计的实现** 在Web开发中,实时在线人数统计是一项常见的需求,它可以帮助网站管理员了解当前有多少用户正在访问网站,以便优化资源分配和服务质量。JSP(JavaServer Pages)作为Java Web开发的重要...
《在线人数统计 v1.0》是一个用于实时统计网站在线用户数量的应用程序,适用于需要监控网站活跃度的场景。此程序包含源代码,允许开发者进行自定义和扩展,以适应不同项目的具体需求。 首先,我们需要了解数据库的...
本文将深入探讨如何使用SpringBoot 2.0与Netty-socket来实现一个实时在线人数统计的功能,并涉及到WebSocket协议的相关知识。 **SpringBoot 2.0** SpringBoot是Spring框架的一个轻量级容器,它简化了Spring应用...
【PHP+TXT在线人数统计】是一种常见的网站访问统计方法,主要通过PHP脚本与文本文件(TXT)交互来实现对当前在线用户数量的实时记录。这种方法适用于小型网站或个人项目,因为它简单易行且资源消耗较低。下面我们将...
在线人数统计是网站运营中一个重要的指标,它可以帮助网站管理员了解网站的活跃度和用户参与度。本套工具名为"people_static.rar_people_在线人数_在线人数统计",旨在为网站提供一个简单易用的在线人数实时统计解决...
要实现在线人数统计,首先需要在全局.asa文件或相应的ASP页面中设置以下代码: ```asp Sub Session_OnStart application("online") = application("online") + 1 End Sub Sub Session_OnEnd application("on...
在线人数统计程序是一种常见的Web应用程序功能,用于实时显示网站或应用程序当前在线用户的数量。这个程序的设计巧妙地避开了对Global.asa文件的依赖,使得它能在那些不支持或限制使用此文件的免费Web托管环境中正常...