Listener学习
什么是Listener
对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化
监听Context
Conetext声明周期监听
- 创建脚本继承ServletContextListener
- 重写方法监听方法
@Override
public void sessionCreated(HttpSessionEvent e) {
System.out.println("监听到 session 创建, sessionid 是: " + e.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent e) {
System.out.println("监听到 session 销毁, sessionid 是: " + e.getSession().getId());
}
- 适配XML
<listener>
<listener-class>listener.SessionListener</listener-class>
</listener>
Context的attribute监听
- 创建脚本继承接口HttpSessionAttributeListener
- 重写监听方法
@Override
public void attributeAdded(ServletContextAttributeEvent e) {
System.out.println("增加属性 ");
System.out.println("属性是" + e.getName());
System.out.println("值是" + e.getValue());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent e) {
// TODO Auto-generated method stub
System.out.println("移除属性 ");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent e) {
// TODO Auto-generated method stub
System.out.println("替换属性");
}
- 在web.xml中配置
监听Session
监听分生命周期
- 继承接口HttpSessionListener
- 重写方法
@Override
public void sessionCreated(HttpSessionEvent e) {
System.out.println("监听到 session 创建, sessionid 是: " + e.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent e) {
System.out.println("监听到 session 销毁, sessionid 是: " + e.getSession().getId());
}
- 配置web.xml
<listener>
<listener-class>listener.SessionListener</listener-class>
</listener>
Attribute变化的监听
1.创建脚本实现接口实现接口 HttpSessionAttributeListener
2.重写监听方法
@Override
public void attributeAdded(HttpSessionBindingEvent e) {
System.out.println("session 增加属性 ");
System.out.println("属性是" + e.getName());
System.out.println("值是" + e.getValue());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent e) {
// TODO Auto-generated method stub
System.out.println("session 移除属性 ");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent e) {
// TODO Auto-generated method stub
System.out.println("session 替换属性 ");
}
3.web.xml配置
监听Request
声明周期监听&&Attribute变化监听
1.创建脚本实现接口 ServletRequestListener和ServletRequestAttributeListener
2. 重写方法
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("销毁了一个Request ");
}
@Override
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("创建了一个Request ");
}
@Override
public void attributeAdded(ServletRequestAttributeEvent e) {
System.out.println("request 增加属性 ");
System.out.println("属性是" + e.getName());
System.out.println("值是" + e.getValue());
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
System.out.println("request 移除属性 ");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
System.out.println("request 替换属性 ");
}
3.配置web.xml
SESSION统计在线人数案例
通过session的值来判断访问人数,用户访问后创建session,30分钟后会自动销毁。