您的位置:首页 > 编程语言 > Java开发

Java监听器学习 统计当前在线人数

2016-12-01 20:23 447 查看
javax.servlet.http.HttpSession 这个类是很常用的,每当我们浏览网站,不论有没有登陆,都会产生1个session,它记录了和浏览者相关的数据;

下面介绍session的2个监听器接口:

1)javax.servlet.http.HttpSessionBindingListener;

实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;

2)javax.servlet.http.HttpSessionListener;

实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;

HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如

Xml代码

<listener>  

 <listener-class>packname.classname</listener-class>  

</listener>  

3)这2个监听器是有区别的

前者的触发取决于 session 中加入的属性;

后者的触发取决于 session 本身的产生和消亡;

与shangshu 之类似的还有
对ServletContext的监听和对Request监听

应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象

OnLineDemo.java

Java代码
package demo;
  

  

import java.util.ArrayList;
  

import java.util.List;
  

  

import javax.servlet.ServletContext;
  

import javax.servlet.ServletContextEvent;
  

import javax.servlet.ServletContextListener;
  

import javax.servlet.http.HttpSessionAttributeListener;
  

import javax.servlet.http.HttpSessionBindingEvent;
  

import javax.servlet.http.HttpSessionEvent;
  

import javax.servlet.http.HttpSessionListener;
  

  

  

  

public class OnlineDemo implements ServletContextListener, HttpSessionListener,
  

        HttpSessionAttribu
101c2
teListener {   

    // 声明一个ServletContext对象   

    private ServletContext application = null;
  

  

    public void contextInitialized(ServletContextEvent sce) {
  

        // 容器初始化时,向application中存放一个空的容器   

        this.application = sce.getServletContext();
  

        this.application.setAttribute("alluser", new ArrayList());
  

    }   

  

    public void contextDestroyed(ServletContextEvent sce) {
  

    }   

  

    public void sessionCreated(HttpSessionEvent se) {
  

    }   

  

    public void sessionDestroyed(HttpSessionEvent se) {
  

        // 将用户名称从列表中删除   

        List l = (List) this.application.getAttribute("alluser");
  

        String value = (String) se.getSession().getAttribute("uname");
  

        l.remove(value);   

        this.application.setAttribute("alluser", l);
  

    }   

  

    public void attributeAdded(HttpSessionBindingEvent se) {
  

        // 如果登陆成功,则将用户名保存在列表之中   

        List l = (List) this.application.getAttribute("alluser");
  

        l.add(se.getValue());   

        this.application.setAttribute("alluser", l);
  

    }   

  

    public void attributeRemoved(HttpSessionBindingEvent se) {
  

    }   

  

    public void attributeReplaced(HttpSessionBindingEvent se) {
  

    }   

}  

online.jsp

Html代码

<%@ page contentType="text/html;charset=gb2312"%>  

<%@ page import="java.util.*"%>  

<form action="online.jsp" method="post">  

用户名:   

<input type="text" name="name">  

<input type="submit" value="登陆">  

<a href="logout.jsp">注销</a>  

</form>  

<!-- 向session接收输入的用户名 -->  

<%   

    if(request.getParameter("name")!=null)   

        session.setAttribute("uname",request.getParameter("name")) ;   

%>  

<h2>在线人员</h2>  

<hr>  

<%   

    List l = (List)application.getAttribute("allUser");
  

    for(Object o : l)   

        out.println(o);   

%>  

logout.jsp

Html代码

<%
  

    session.invalidate() ;   

%>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: