您的位置:首页 > 理论基础 > 计算机网络

J2EE中统计当前在线人数――HttpSessionBindingListener和HttpSessionListener

2012-10-07 09:02 633 查看
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中启动这个监听器,例如

<listener>

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

</listener>

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

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

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

4 与和上述之类似的还有对ServletContext的监听和对Request监听。

二 应用——当前在线人数列表

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

OnLineDemo.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, HttpSessionAttributeListener {

// 声明一个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

<%@ 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>

<%

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

<%

session.invalidate() ;

%>

原帖地址:http://blog.sina.com.cn/s/blog_705c12080100nayb.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐