答案:package com.it.oa.sessionListener;
import java.util.List;
import java.util.Vector;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import java.sql.*;
public class SessionListenerOnline implements HttpSessionBindingListener {
private Vector users=new Vector();
/**
* 返回登陆用户的数量
* @return
*/
public int getCount(){
users.trimToSize();//调整Vector users的容量为Vector users的大小
return users.capacity();//返回users的容量
}
/**
* 检查是否存在用户
* @param userName
* @return
*/
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for (int i=0;i<users.capacity();i++ ){
if (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return existUser;
}
/**
* 删除用户
* @param userName
* @return
*/
public boolean deleteUser(String userName){
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0;i<users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}
/**
* 获得在线用户的id
* @return
*/
public Vector getOnLineUser()
{
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
// System.out.println("请求:::::::::::"+e.getName());
if(!existUser(e.getName())){
users.add(e.getName());
// System.out.print(e.getName()+" 登入到系统 "+(new Date()));
// System.out.println(" 在线用户数为:"+getCount());
}else{
// System.out.println(e.getName()+"已经存在");
}
}
/**
* session失效的时候修改全局变量和清空session
*/
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
// 获得在线人数
int num = Integer.parseInt(e.getSession().getServletContext().getAttribute("onLineNumber").toString());
int id = Integer.parseInt(userName);
// 如果非法关闭浏览器 在session失效时候自动把它的人员状态改为离开
try{
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=OA","sa","sa");
// PreparedStatement pstm = conn.prepareStatement("update oa_ryzt set ztlx =2 where ryid =? ");
// pstm.setInt(1,id);
// pstm.executeUpdate();
// 在线人数减1
num = num - 1;
e.getSession().getServletContext().setAttribute("onLineNumber", num);
// 获得在线的所有用户id
List userList = (List)e.getSession().getServletContext().getAttribute("onLineUser");
for(int i=0;i<userList.size();i++){
int userid = Integer.parseInt(userList.get(i).toString());
if(id == userid){
// 删除下线用户的id
userList.remove(i);
}
}
// 将信息重新保存到作用域
e.getSession().getServletContext().setAttribute("onLineUser", userList);
//e.getSession().setAttribute("onLine", num);
}
catch(Exception ex){
ex.printStackTrace();
}
deleteUser(userName);
// System.out.print(userName+" 退出系统 "+(new Date()));
// System.out.println(" 在线用户数为:"+getCount());
}
}
上一个:java,c++,c#和嵌入式哪个更有前途
下一个:关于一个JAVA开发的学员管理系统的毕业论文