Java web中的监听器主要用于监听特定的事件,然后在该事件的前后增加相应的处理。
监听器的种类
按照监听对象划分:
- ServletContext:对应ServletContextLisener
- HttpSession:HttpSessionLisener
- ServletRequest:ServletRequestLisener
按监听的事件划分:
- 监听对象的销毁和初始化:ServletContext、HttpSession、ServletRequest的init和destory
- 监听对象的属性的增加、删除、替换:上面三个监听器对象的属性的增加、删除、替换。对应的监听器分别是ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener
- 针对HttpSesssion状态:session中某个对象的状态变化。HttpSessionBindingListener监听对象绑定到session和从session 中解绑;HttpSessionActivationListener监听session对象持久化到存储设备和从存储 设备中恢复
监听器的常见用途:
- HttpSessionLitsener统计在线人数
- 利用ServletContextListener加载初始化信息
- 统计网站访问量
在springboot环境下使用:
@SpringBootApplication
@ServletComponentScan
public class Application extends SpringBootServletInitializer {
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
/*@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}*/
}
自定义类实现监听器接口:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class MyContextLisener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("初始化servletcontext");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("销毁servletcontext");
}
}
各监听器调用时机:
ServletContextLisener:servlet容器启动和关闭
HttpSessionLisener:调用getSession()创建session对象时调用。访问HTML和servlet不会调用;访问jsp页面会调用
ServletRequestLisener:每次发起请求时都会调用