介绍
Listener 是 JavaEE 规范之一,是JAVA接口
Listener 就 JavaWeb 三大组件之一。另外2个是:Servlet、Filter 过滤器
注意
访问 .html 等静态资源,不会创建 session
访问 jsp、servlet 时,才会创建 session
监听器
ServletContext相关监听器
- ServletContextListener:监听 ServletContext 对象的创建和销毁
- ServletContextAttributeListener:监听 ServletContext 对象 属性的添加、删除和修改
HttpSession相关监听器:
- HttpSessionListener:监听 session 的创建和销毁
- HttpSessionAttributeListener:监听 session 属性的添加、删除和修改
- HttpSessionActivationListener:监听 session 的 active 和 passivate 情况
- HttpSessionBindingListener
ServletRequest相关监听器:
- ServletRequestListener:监听 HttpServletRequest 对象的创建和销毁
- ServletRequestAttributeListener 监听 HttpServletRequest 对象 属性的添加、删除和修改
ServletContextListener、HttpSessionListener 较为常用
应用场景
ServletContextListener:spring框架通过此监听器进行系统初始化
HttpSessionListener:统计网站在线人数
实现方式
- 实现 相应监听器 接口,实现 相应的 方法
配置
- 配置 web.xml 中
- 注解(新方式)
例子
实现在线人数
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class SessionListener implements HttpSessionListener{
int count=0;
/**
* 当有session创建,那么就执行该方法
*/
@Override
public void sessionCreated(HttpSessionEvent arg0) {
count++;
//获取创建的session对象
HttpSession session=arg0.getSession();
System.out.println(session.getId());
}
/**
* 当有session销毁时,执行该方法
*/
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
count--;
//获取 销毁的session对象
HttpSession session=arg0.getSession();
System.out.println(session.getId());
}
}
例子:配置方式
java
@WebListener
public class ServletContextListenerImpl implements ServletContextListener {
public ServletContextListenerImpl(){
System.out.println("ServletContextListenerImpl构造方法");
}
//在 ServletContext 对象创建时,调用该方法
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("创建ServletContext对象");
}
//在 ServletContext 对象销毁时,调用该方法
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("销毁ServletContext对象");
}
}
配置web.xml
<listener>
<listener-class>top.malaoshi.ServletContextListenerImpl</listener-class>
</listener>
例子:注解方式
@WebListener
public class ServletContextListenerImpl implements ServletContextListener {
public ServletContextListenerImpl(){
System.out.println("ServletContextListenerImpl构造方法");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("创建ServletContext对象");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("销毁ServletContext对象");
}
}