`

上下线 在线用户数listenner

    博客分类:
  • j2ee
阅读更多

下面是搜集的一些listener方面的知识

简例一

监听用户上线与退出,显示在线用户

1、登陆页面 Login.jsp

<%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" %>
<%
session=request.getSession(false);
if(session!=null)session.invalidate();
%>
<html>
<head><title></title></head>
<body>
<form action="isOnline.jsp" method="post">
用户名:<input type="text" name="uName"/>
<input type="submit" value="上线">
</form>
</body>
</html>

2、控制页面(只是为了说明监听器问题,所以简单了点...) isOnline.jsp

<%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" %>
<html>
<head><title></title></head>
<body>
<%
session=request.getSession();
session.setAttribute("userName",request.getParameter("uName"));
response.sendRedirect("showOnline.jsp");
%>
</body>
</html>


3、显示页面 showOnline.jsp

<%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" import="java.util.ArrayList" %>
<html>
<head><title></title></head>
<body>
<%
ArrayList showList=(ArrayList)(getServletContext().getAttribute("list"));
out.print("在线人数 "+showList.size()+"<br>");
for(int i=0;i<showList.size();i++){
out.print(showList.get(i)+"在线"+"<br>");
}
%>
<br>
<a href="Login.jsp">退出</a>
</body>
</html>

4、配置页面 web.xml

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<listener>
    <listener-class>org.xiosu.listener.onlineListener</listener-class>
</listener>
</web-app>

5、监听器 onlineListener.java

package org.xiosu.listener;

import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class onlineListener implements HttpSessionListener,
  HttpSessionAttributeListener {
// 参数
ServletContext sc;
ArrayList list = new ArrayList();
// 新建一个session时触发此操作
public void sessionCreated(HttpSessionEvent se) {
  sc=se.getSession().getServletContext();
  System.out.println("新建一个session");
}
// 销毁一个session时触发此操作
public void sessionDestroyed(HttpSessionEvent se) {
  System.out.println("销毁一个session");
  if (!list.isEmpty()) {
   list.remove((String) se.getSession().getAttribute("userName"));
   sc.setAttribute("list", list);
  }
}
// 在session中添加对象时触发此操作,在list中添加一个对象
public void attributeAdded(HttpSessionBindingEvent sbe) {
  list.add((String) sbe.getValue());
  sc.setAttribute("list", list);
}
// 修改、删除session中添加对象时触发此操作
public void attributeRemoved(HttpSessionBindingEvent arg0) {
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
}
}


说明:本例只为简单介绍监听器,并未进行安全方面设置。

监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent   se)方法,这样
就可以给在线人数加1。常用的监听接口有以下几个:
ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。
ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent   sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent   sce)方法。
HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session   Created(HttpSessionEvent   se)方法;当销毁一个Session时,激发sessionDestroyed   (HttpSessionEvent   se)方法。
HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent   se)   方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent   se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent   se)   方法。
example:随服务器启动
web-app>

      com.tb.listener.CountStartListener


package com.tb.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
import com.tb.timertask.DoCountTask;
public class CountStartListener extends HttpServlet implements ServletContextListener
{
private static final long serialVersionUID = 1824920962239905170L;
public CountStartListener()
{
   // TODO Auto-generated constructor stub
}
public void contextDestroyed(ServletContextEvent arg0)
{
   // TODO Auto-generated method stub
}
   public void contextInitialized(ServletContextEvent arg0)
{   
   DoCountTask.dotask();
}
}

分享到:
评论

相关推荐

    C++编写的K线图(源码)

    K线通常由一根代表开盘价和收盘价的矩形柱子(或“蜡烛”)和上下两个线段(“影线”)组成,分别表示当天的最高价和最低价。根据开盘价与收盘价的关系,矩形可以填充为不同颜色,比如收盘价高于开盘价则填充为绿色...

    VC++三次样条插值&贝塞尔曲线&GDI+平滑曲线程序

    这些文件共同构成了整个程序的编译和运行环境,使得用户可以在MFC对话框中直观地比较和查看三次样条插值、贝塞尔曲线和平滑曲线的效果。 总的来说,这个程序是一个结合了数学理论与编程实践的优秀示例,它展示了...

    Android抖动动画效果(上下抖和以角旋转)

    在Android开发中,动画效果是提升用户体验的重要手段之一。"Android抖动动画效果(上下抖和以角旋转)"这个主题主要关注如何实现物体在屏幕上进行上下抖动和以角度旋转这两种动态效果。抖动动画通常用于错误提示、...

    urtracker免费版(3.3.0.813 ) 一个月后五个用户限制的破解dll

    urtracker免费版(3.3.0.813 )基本上可以完成小型团队的需求,功能也很强大,但安装一个月后用户数不能多于5个的限制也很麻烦,因此稍微修改了一下URTracker2.dll文件,做到了用不过期也就没有用户数的限制了,直接...

    HTML5页面,上下切换页面效果

    本主题聚焦于利用HTML5来实现页面之间的上下切换效果,这种效果常见于移动应用中,能为用户提供流畅的导航体验。 首先,我们要理解HTML5的核心特性之一是离线存储能力,通过`Application Cache`或`Service Worker`...

    基于传输线变压器的BALUN计算器

    给定的"基于传输线变压器的BALUN计算器"工具很可能是一个软件或电子表格,用于帮助用户根据具体需求计算出传输线的尺寸和参数。使用这类计算器,用户可以输入目标阻抗、工作频率、所需的带宽和可用的传输线类型等...

    中国海岸线shp图.rar

    用户可以通过ArcGIS将此Shapefile数据导入,进行地图展示、编辑、分析和打印。例如,可以测量海岸线的长度,研究海岸线变化,或者结合其他数据进行海岸带资源评估和环境影响分析。 4. **地理分析**:利用中国海岸线...

    Android日历可左右活动上下定位收缩

    在Android开发中,创建一个可左右滑动切换月份、上下滑动收缩的日历视图是一项常见的需求。这种功能常用于日程管理应用,为用户提供直观的日期选择方式。"Android日历可左右活动上下定位收缩"这个项目的核心在于实现...

    中国九段线shp

    通过这些数据,用户可以清楚地看到九段线的具体走向,分析其与周边海域的关系,以及进行各种地理空间分析。 了解如何正确处理和分析这些数据至关重要,因为它们涉及到国家的领土主张和海洋权益。在实际应用中,可能...

    C#绘制实时曲线,可放大局部图像

    在C#编程中,绘制实时曲线并实现局部图像放大是一项重要的功能,常见于数据分析、监控系统和图形用户界面(GUI)应用中。本篇将详细阐述如何利用C#实现这一功能,包括基本原理、关键技术和具体步骤。 首先,我们要...

    wpf 带表格线的listview

    这种自定义不仅可以提升用户界面的美观度,还可以增强用户的使用体验,使他们更容易地理解和操作数据。 在提供的压缩包"ListViewWithLines"中,可能包含了实现这一功能的示例代码,包括XAML布局文件和相关的后台...

    三次样条曲线拟合VC++

    9. **误差分析**:为了评估拟合质量,可以计算拟合曲线与原始数据点之间的残差或使用某种误差度量,如均方根误差。 10. **适用场景**:三次样条曲线拟合常用于数据插值、信号平滑、曲线设计和动画生成等领域。在...

    console线驱动

    而思科的Console线驱动则与Cisco终端仿真程序(如Cisco TACACS+或SecureCRT)兼容,允许用户通过命令行界面(CLI)进行设备管理。 安装和配置Console线驱动的步骤通常包括以下几点: 1. 下载适合操作系统版本的...

    android上下拉刷新Demo

    在Android应用开发中,"上下拉刷新"是一个常见的功能,特别是在列表或滚动视图中,用户可以下拉来获取更多数据,上拉则更新已有内容。这个"android上下拉刷新Demo"应该是一个示例项目,展示了如何在Android应用中...

    SVG绘制K线图

    1.根据用户选择的时间区间,显示最高价和最低价。 2.点击最高价或最低价的flags会显示出相应的时间。 3.动态改变X轴时间显示格式(%Y %Y-%m %m-%d),防止样式重叠在一起。 4. 动态改变Y轴的最大值最小值,防止K...

    Android抽屉效果上下抽屉

    这个效果常见于许多应用程序,如Google Maps、Gmail等,它允许用户从屏幕边缘滑动以显示一个可隐藏的侧边栏,通常用于放置导航菜单或其他功能选项。 抽屉效果的实现主要涉及以下几个关键知识点: 1. **...

    用OpenCV实现Photoshop曲线算法源码

    在Photoshop中,曲线调整允许用户通过改变像素亮度级别的映射关系来改变图像的整体亮度、对比度和色彩平衡。曲线通常显示为图像直方图上方的一个图形界面,用户可以通过拖动曲线上的点来调整像素的亮度分布。 在...

    C# 股票软件,带K线解析以及画图和一些个指标

    它由开盘价、收盘价、最高价和最低价四个关键数据组成,形成四种不同类型的K线:阳线、阴线、十字星和一字线。C#软件通过解析这些数据,可以为用户提供直观的市场走势分析。 2. **图表绘制**: 在股票软件中,可视...

    C#Winform图片剪切拼接终结版(多幅图片拼接、左右上下拼接)

    标题“C# Winform图片剪切拼接终结版(多幅图片拼接、左右上下拼接)”表明这是一个针对C#开发者,特别是那些在Windows桌面应用开发领域工作的程序员的资源。描述中提到,该工具增加了去除剪切框的功能,并支持多种...

    HTML5手机专题页面触屏滑动上下翻页特效

    "HTML5手机专题页面触屏滑动上下翻页特效"就是其中的一个典型应用场景,它旨在提升用户在手机端浏览网页的体验,通过触屏手势实现流畅的上下翻页效果。 首先,HTML5的`&lt;meta&gt;`标签可以设置页面的视口(viewport),...

Global site tag (gtag.js) - Google Analytics