springboot對監聽器Listener的使用


監聽器:listener是servlet規范中定義的一種特殊類。用於監聽servletContext、HttpSession和servletRequest等域對象的創建和銷毀事件。監聽域對象的屬性發生修改的事件。

    用於在事件發生前、發生后做一些必要的處理。其主要可用於以下方面:

        1、統計在線人數和在線用戶

        2、系統啟動時加載初始化信息

        3、統計網站訪問量

        4、記錄用戶訪問路徑

方法1: 使用Springboot提供了RegistrationBean的子類ServletListenerRegistrationBean 用於注冊Filter,完成過濾器的設置首先我們創建一個MyHttpSessionListener類

  

package com.example.spingbootdemo1.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyHttpSessionListener implements HttpSessionListener {
    private static int onlineNum = 0;

    public void sessionCreated(HttpSessionEvent se) {
        onlineNum++;
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        onlineNum--;
    }
}

 

然后我們創建一個控制器UserController

import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;

public class UserController {
    @RequestMapping("/onlineCount")
    public String onlineCount(){
        return"網站當前在線人數為:"+ MyHttpSessionListener.onlineNum;
    }

    @RequestMapping("/index")
    public String index(HttpSession httpSession){
        //在訪問首頁的時候觸發session的操作
        httpSession.setAttribute("username","xiadewang");return"首頁";
    }
}

上面我們已經把監聽器和控制層的工作完成了,但是我們知道springboot里面的監聽器實際上底下就是spring和springmvc相關的東西,再下面就是servlet,在以前的老項目中我們需要在web.xml中多監聽器做配置。而在springboot中我們沒有了web.xml等相關xml配置文件,取而代之的是使用@Configuration注解在java代碼中實現相關配置。於是我們可以創建一個配置類,代碼如下:

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

這里我們使用@Configuration注解和@Bean注解實現了一個監聽器的注冊綁定配置。@Configuration其實就是告訴spring,spring容器要怎么配置(怎么去注冊bean,怎么去處理bean之間的關系(裝配)=>@Configuration相當於<beans></beans>便簽,作用為配置spring容器(應用上下文)。那么久很好理解了,@Bean的意思就是,我要獲取這個bean的時候,你spring要按照這種方式去幫我獲取到這個bean。@Bean注解的方法會實例化、配置並初始化一個新的對象,這個對象會由spring IoC 容器管理。

方法2: 使用@WebListener注解完成過濾器的設置

在MyHttpSessionListener上面加上@WebListener注解,

package com.example.spingbootdemo1.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
    public static int onlineNum = 0;

    public void sessionCreated(HttpSessionEvent se) {
        onlineNum++;
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        onlineNum--;
    }
}

然后在啟動類上加@ServletComponentScan注解提供支持掃描webListener

/***
 * 使用@ServletComponentScan配合@WebListener后,務必要刪除之前創建的MyMvcConfig這個類。實現過濾器配置二者選其一即可。
 * springboot默認會檢索啟動類所在包和子包下的所有spring容器相關的注解(比如@Controller、@Component等),但是像@WebFilter和@WebListener之類的不會
 */
@ServletComponentScan
@SpringBootApplication
public class Spingbootdemo1Application {
 public static void main(String[] args) {
        SpringApplication.run(Spingbootdemo1Application.class, args);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM