private User user;
public OnLineUser(){}
public OnLineUser(User user){
this.user = user;
}
@SuppressWarnings("unchecked")
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("valueBound()方法执行=============");
Calendar calendar = new GregorianCalendar();
System.out.println("登录:" + user.getName() + " 时间:"
+ calendar.getTime());
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// 将当前登录的用户保存到application中
List<User> users = (List<User>) application
.getAttribute("CURRENT_USER");
if (users == null) {
users = new ArrayList<User>();
application.setAttribute("CURRENT_USER", users);
}
//被挤下去时可能会出现这种情况
for(User su :users)
{
if(su.getName().equals(user.getName()))
{
users.remove(su);
break;
}
}
users.add(user);
System.out.println(user.getName() + " 登录,系统将其纳入在线用户列表。");
System.out.println("当前在线人数:" + users.size());
}
public void valueUnbound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("========valueUnbound========");
}
那么实现这个类,这两个方法是在什么时候调用呢?
请看下文:
User user = new User();
user.setName(userQry.getName());
user.setPassword(userQry.getPassword());
if(result == true){
OnLineUser onLineUser = new OnLineUser(user);
Map session = ActionContext.getContext().getSession();
session.put("LOGIN_LISTEN", onLineUser);
}
当我们调用 session.put() 方法的时候,valueBound(HttpSessionBindingEvent event)将自动调用,session.remove("LOGIN_LISTEN") ,valueUnbound(HttpSessionBindingEvent even)将自动调用。