关键字: httpsession

1.http://www.jspcn.net/htmlnews/11049329478121583.html       监听器

2.session.invalidate() ,session才会destroy

3.HttpSessionListener:  这个监听取不到session里面的值

http://hi.baidu.com/tianshiyeben/blog/item/17d43923d695d042ad34de36.html

http://www.family168.com/tutorial/jsp/html/jsp-ch-04.html#jsp-ch-04-02     在线列表实例

下面的代码可以获取上线,下线的在线列表 :

public class OnlineListener implements HttpSessionListener ,HttpSessionAttributeListener{

public void sessionCreated(HttpSessionEvent event) {//只要一打开浏览器就会执行 ,没有登陆也会执行.

}

public void sessionDestroyed(HttpSessionEvent event) {//只有超时,invalidate()才会执行 
  
                   HttpSession se=event.getSession();
                  OnlineManager.getInstance().removeSession(se); //从列表中删除
               // System.out.println("remove session....................");//为什么浏览窗口关闭了,没有执行啊???
  
             }

public void attributeAdded(HttpSessionBindingEvent event) {//如果登陆成功, 就把上线 用户添加 到列表.
              HttpSession se=event.getSession();
             String name=event.getName();
              String value=(String)event.getValue();
              if("username".equals(name)){
                      OnlineManager.getInstance().addSession(se); //添加 
             }
            }

}

public class OnlineManager {

private static OnlineManager om;
 private  Map<String,HttpSession> sessions;
 private OnlineManager(){
  sessions=new HashMap<String,HttpSession>();//为什么没有共用一个sessions;
 }
 public static OnlineManager getInstance(){
  if(om==null){
   om=new OnlineManager();
  }
  return om;
 }
 public void addSession(HttpSession se){
  String key=(String)se.getAttribute("username");
  sessions.put(key, se);
  System.out.println("add 1 : "+sessions.size());
  
 }
 public void removeSession(HttpSession se){
  String key=(String)se.getAttribute("username");
  //sessions.remove(key);  //这个只是把key=null
  sessions.remove(sessions.get(key));
  System.out.println("remove 1 : " +"key:"+key+sessions.size());
  System.out.println(sessions);
 }
}
------------------------

第二种方法实现在线,下线:

public class BindSession implements HttpSessionBindingListener {
 
 private String username;
 
 public BindSession(String username){
  this.username=username;
 }
 public void valueBound(HttpSessionBindingEvent event) {
   HttpSession session = event.getSession();
  // String name=(String)session.getAttribute("name");
  
      ServletContext application = session.getServletContext();

// 把用户名放入在线列表
      List onlineUserList = (List) application.getAttribute("onlineUserList");
      // 第一次使用前,需要初始化
      if (onlineUserList == null) {
          onlineUserList = new ArrayList();
          application.setAttribute("onlineUserList", onlineUserList);
      }
      onlineUserList.add(this.username);
      System.out.println("valueBound: .........."+onlineUserList.size());
 }

public void valueUnbound(HttpSessionBindingEvent event) {
   HttpSession session = event.getSession();
  // String name=(String)session.getAttribute("name");
      ServletContext application = session.getServletContext();

// 从在线列表中删除用户名
      List onlineUserList = (List) application.getAttribute("onlineUserList");
      onlineUserList.remove(this.username);

System.out.println(this.username + "退出。");

}

}

public class Login extends HttpServlet {

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String name=req.getParameter("name");
  String pass=req.getParameter("password");
  boolean isLogin=false;
  int len=set.size();
  for(int i=0;i<len;i++){
   if(set.containsKey(name)&&set.containsValue(pass)){
    isLogin=true;
   }
  }
  
  if(isLogin){
   req.getSession().setAttribute("username", name);
   System.out.println("login ...username="+name);
   
   //BindListener 的使用:
   BindSession bl=new BindSession(name);
   req.getSession().setAttribute("lis", bl);
   resp.sendRedirect("index.jsp");
  }
  else{
   resp.sendRedirect("login.jsp");
  }

java Session统计在线用户,并且显示在线用户的更多相关文章

  1. 【Linux学习】Linux用户管理1—用户查询指令、用户切换

    Linux用户管理1-用户查询指令.用户切换 一.用户查询指令 who: 查看当前在线用户情况 -a:显示所有用户的所有信息 -m:显示运行该程序的用户名,和"who am I"的 ...

  2. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_11-前端显示当前用户-前端请求jwt

    前端代码 sessionStorage也是key/value的格式 页头显示当前用户 查询jwt nginx里面的配置 测试 开启认证服务 进行登陆 跳转到首页就应该立即请求查询. 跳转到首页 coo ...

  3. ASP.NET实现在线人员实时显示

    在最近的学习中,参考其他资源,做了一个简单的在线人员显示的功能,总结了一下,思路如下: 1.定义一个全局的内存来作为在线人员列表 2.通过实时判断用户Session值,来判断某个用户的登录或离线 3. ...

  4. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  5. linux查看在线用户并踢出用户

    linux查看在线用户并踢出用户 1.查看在线用户 w [root@dbserver01 ~]# w 16:45:04 up 16 days, 8:48, 1 user, load average: ...

  6. leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  7. openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线)

    openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线): 打开openfire管理界面,找到服务器系统属性,添加一个属性(属性名:plugin.broadcast.all2 ...

  8. session统计在线人数

    /* * 当不涉及验证码的时候 */ //统计游客(未登录)人数 $map = array('session_expire'=>array('gt',NOW_TIME),'session_dat ...

  9. 通过纯真IP地址实现根据用户地址显示信息

    为了实现中关村在线商品报价中通过用户的地理位置信息显示相应的报价. 示例地址:http://detail.zol.com.cn/lens/index224693.shtml 现把我做的使用asp.ne ...

随机推荐

  1. python-装饰器简述

    装饰器是什么 用来修饰别的函数的函数就可以称之为装饰器 这种函数的参数一般就是另外一个函数 也就是说,调用这种函数,需要给这种函数传参,且参数是函数 @语法糖 @语法糖一般用来表示装饰器函数 不用@也 ...

  2. New UWP Community Toolkit - DeveloperTools

    概述 UWP Community Toolkit  中有一个开发者工具集 DeveloperTools,可以帮助开发者在开发过程中进行 UI 和功能的调试,本篇我们结合代码详细讲解  Develope ...

  3. spring-oauth-server实践:使用授权方式四:client_credentials 模式的客户端和服务端交互

    spring-oauth-server入门(1-11)使用授权方式四:client_credentials 模式的客戶端 一.客户端逻辑 1.界面入口(credentials_access_token ...

  4. 新概念英语(1-13)A new dress

    What colour is Anna's hat? A:What colour is your new dress? B:It's green.Come upstairs and see it. A ...

  5. Spring入门(3-1)Spring的标签命名空间

    1.标签命名空间声明: 2.标签命名空间使用 标签默认的命名空间是 security:,可以不用带 security:,直接写标签,如: <http  <authentication-ma ...

  6. 在ABPZERO中,扩展实体的方法。

    内容 介绍 扩展的抽象实体 将新属性添加给用户 添加迁移 在界面上显示地址 在用户编辑/添加功能中添加地址 扩展的非抽象类实体 获得版本的派生实体 添加迁移 在界面上添加价格 在创建/编辑版本功能中加 ...

  7. 表单提交中的input、button、submit的区别

    1.input[type=submit] 我们直接来看例子: 代码如下: <form> <input name="name"> <input type ...

  8. Oracle:常用的一些基本操作

    表操作 查看系统中当前用户所有表: select * from user_tables;select * from user_indexs;select * from user_triggers; s ...

  9. scrapy分布式的几个重点问题

    我们之前的爬虫都是在同一台机器运行的,叫做单机爬虫.scrapy的经典架构图也是描述的单机架构.那么分布式爬虫架构实际上就是:由一台主机维护所有的爬取队列,每台从机的sheduler共享该队列,协同存 ...

  10. 正则-匹配IP地址

    >>> re.search(r'[aeiouAEIOU]','I love FishC.com!') 中括号里面的任意一个字符匹配成功就会返回数值 <_sre.SRE_Matc ...