监听在线用户
监听器的作用是监听Web容器的有效事件,有Servlet容器管理,应用Listener接口监听某个执行程序,根据该程序的需求做出适当的响应
本列应用HttpBindingListener监听接口,监听HTTP会话中对象的绑定信息。它是唯一不需要在web.xml中设定的监听。
HttpBindingListener接口提供两个方法:
valueBound(HttpSessionBindingEvent arg0):当有对象加入session的范围时会被自动调用
valueUnbound(HttpSessionBindingEvent arg0):当有对象从session的范围内移除时会被自动调动
创建LoginList.java类来存放用户和在线用户的具体操作
public class LoginList {
private static LoginList user=new LoginList();
private Vector vector=null;
public LoginList(){
this.vector=new Vector();
}
public static LoginList getInstance(){
return user;
}
public boolean addLoginList(String user){ //用户登录
if(user!=null){
this.vector.add(user);
return true;
}else{
return false;
}
}
public Vector getList(){ //获取用户列表
return vector;
}
public void removeLoginList(String user){ //删除用户
if(user!=null){
vector.removeElement(user);
}
}
}
创建LoginNote.java类,实现HttoSessionBindingListener类
public class LoginNote implements javax.servlet.http.HttpSessionBindingListener {
private String user;
private LoginList container=LoginList.getInstance();
public LoginNote(){
user="";
}
public void setUser(String user){
this.user=user;
}
public String getUser(){
return this.user;
}
@Override
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println(this.user+"该用户已经上线");
}
@Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println(this.user+"该用户已经下线");
if(user!=""){
container.removeLoginList(user);
}
}
}
创建LoginList.jsp在线用户页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="com.cn.zj.Filter.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%
LoginList list=LoginList.getInstance();
LoginNote ut=new LoginNote();
String name=request.getParameter("user");
ut.setUser(name);
session.setAttribute("list",ut);
list.addLoginList(ut.getUser());
session.setMaxInactiveInterval(10);
%>
<body>
<div align="center">
<table width="400" height="150" border="0" cellpadding="0" cellspacing="0" bgcolor="lightblue">
<tr align="center"><td>用户在线列表</td></tr>
<tr>
<td align="center"><br>
<textarea rows="5" cols="22">
<%
Vector vector=list.getList();
if(vector!=null&&vector.size()>0){
for(int i=0;i<vector.size();i++){
out.println(vector.elementAt(i)+"已经登录在线");
}
}
%>
</textarea><br><br>
<a href="loginOut.jsp">返回</a>
</td>
</tr>
</table>
</div>
</body>
</html>
index.jsp页面
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>监听查看在线用户</title>
</head>
<script language="javascript">
function checkEmpty(form){
for(i=0;i<form.length;i++){
if(form.elements[i].value==""){
alert("表单信息不能为空");
return false;
}
}
}
</script>
<link href="css/style.css" rel="stylesheet" type="text/css">
<body>
<div align="center">
<table width="400" height="150" border="0" cellpadding="0" cellspacing="0" bgcolor="lightblue">
<Tr><td> </td></Tr>
<tr>
<td align="center">
<form name="form" method="post" action="LoginList.jsp" onSubmit="return checkEmpty(form)">
<input type="text" name="user"><br><br>
<input type="submit" name="Submit" value="登录上线">
</form>
</td>
</tr>
</table>
</div>
</body>
</html>
loginOut.jsp页面
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<%
session.invalidate();
out.println("<script>parent.location.href='index.jsp';</script>");
%>