1 关于Listener元素
<listener>元素用于在WEB应用中配置事件监听器,监听器是一些实现特定监听接口的特殊的Servlet类,可以监听Web应用的上下文信息,
会话信息,和Servlet请求信息。
2 监听上下文信息
javax.servlet.ServletContextListener 接口监听ServletContext的信息,如ServletContext的创建和删除。
javax.servlet.ServletContextAttributeListener 接口监听ServletContext属性的设置,如增加、删除、和修改操作。
3 监听会话信息
javax.servlet.http.HttpSessionListener 接口监听Http会话创建、销毁。
javax.servlet.Http.HttpSessionActivationListener 接口监听Http会话active passivate 。
4 监听servlet请求信息
javax.servlet.ServletRequestListener 接口监听Servlet请求创建和删除 。
javax.servlet.ServletRequesAttributetListener 监听Servlet请求属性信息 。
5 实例 : 通过一个监听会话信息的监听器来记录系统当前用户的数量。
(1) 新建一个监听器的类 ,继承基类 javax.servlet.http.HttpSessionListener
package cn.bupt.duming.util;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class UserListener implements HttpSessionAttributeListener {
int users = 0 ;
//当用户信息保存入Session
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
if(se.getName().equals("username")){
//用户数增加
users++ ;
System.out.println("用户登陆,用户名: "+ se.getValue());
System.out.println("当前用户数: "+ users) ;
}
}
//当session中用户信息被删除
public void attributeRemoved(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
//用户数减少
users-- ;
System.out.println("用户注册,用户名:" + se.getValue());
System.out.println("当前用户数: " + users);
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
}
6 在web.xml中增加如下元素
<listener>
<listener-class>cn.bupt.duming.util.UserListener</listener-class>
</listener>
7 在对应的action中添加如下代码
HttpSession session = request.getSession() ;
//增加属性
session.setAttribute("username", userName) ;
//删除session
session.invalidate() ;
增加属性会自动激发public void attributeAdded(HttpSessionBindingEvent se) 方法, 而session.invalitate()会触发public void attributeRemoved(HttpSessionBindingEvent se)方法。