Springboot——监听器

简介

监听器(Listener)是servlet规范中定义的一种特殊类。用于监听servletContext、HttpSession和servletRequest等域对象的创建和销毁事件;监听域对象的属性发生修改的事件;用于在事件发生前后做一些必要的处理。
其主要可用于以下方面:
1、统计在线人数和在线用户
2、系统启动时加载初始化信息
3、统计网站访问量
4、记录用户访问路径。
Servlet中的监听器的分类:
(1)监听三个域对象的创建和销毁的监听器
(2)监听三个域对象的属性变更(属性添加、移除、替换)的监听器
(3)监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听
监听器相关术语:
事件源:被监听者
监听器:监听者
事件源和监听器绑定:在事件源上安装监听器
事件:指的是事件源对象的改变——主要功能获得事件源对象。

使用

统计在线人数
方式1、使用自带的ServletListenerRegistrationBean 完成设置
(1)首先创建一个MyHttpSessionListener类

public class MyHttpSessionListener implements HttpSessionListener {
    public static int onlineNum=0;
    //session创建的时候人数+1
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        onlineNum++;    
    }
    //session销毁的时候人数-1 
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        onlineNum--;
    }
}

(2)使用@Configuration注解替代web.xml对监听器进行配置

@Configuration
public class MyMvcConfig   {
    @Bean
    public ServletListenerRegistrationBean listenerRegist() {
    ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean();
    srb.setListener(new MyHttpSessionListener());
    return srb;
    }
}

(3)创建一个控制器UserController

@RestController
public class UserController {
    @RequestMapping("/onlineCount")
    public String onlineCount(){
        return "网站当前在线人数为:"+MyHttpSessionListener.onlineNum;    
    }
    @RequestMapping("/index")
    public String index(HttpSession session){//在访问首页的时候触发session的操作 
        session.setAttribute("username","xxx");
        return "首页";
    }
}

方式2、 使用@WebListener注解完成设置
(1)创建一个MyHttpSessionListener类

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
    public static int onlineNum=0;
    //session创建的时候人数+1
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        onlineNum++;
    }
    //session销毁的时候人数-1
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        onlineNum--;
    }
}

(2)在入口类(Listenerdemo2Application)中加入@ServletComponentScan注解,开启对注解@WebListener的支持

@ServletComponentScan
@SpringBootApplication
public class Listenerdemo2Application {
    public static void main(String[] args) {
        SpringApplication.run(Listenerdemo2Application.class, args);
    }
}

(3)创建一个控制器UserController(同方式1)
!注:(1)使用@ServletComponentScan配合@WebListener后,就不用创建MyMvcConfig这个类。二者选其一即可。
(2)springboot默认会检索启动类所在包和子包下的所有spring容器相关的注解(比如@Controller、@Component等),但是像@WebFilter和@WebListener之类的不会。

你可能感兴趣的:(Springboot——监听器)