Servlet的監聽器Listener,它是實現了javax.servlet.ServletContextListener接口的服務器端程序,它也是隨web應用的啓動而啓動,只初始化一次,隨web應用的停止而銷燬。主要作用是:做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。用於監聽servletContext、HttpSession和servletRequest等域對象的創建和銷燬事件
springboot中創建監聽器兩種方式:
一、通過代碼方式注入過濾器,
@Configuration 類中
@Bean
public ServletListenerRegistrationBean servletListenerRegistrationBean(){
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new IndexListener());
return servletListenerRegistrationBean;
}
監聽器具體類:
public class MyListen implements HttpSessionListener {
public static int online = 0;
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session監聽器初始化");
online++;
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session監聽器銷燬");
}
}
二 註解方式
@WebListener
public class MyListen implements HttpSessionListener {
public static int online = 0;
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session監聽器初始化");
online++;
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session監聽器銷燬");
}
}
啓動類上使用@ServletComponentScan,自動掃描帶有(@WebServlet, @WebFilter, and @WebListener)註解的類,完成註冊。
@SpringBootApplication
@MapperScan("com.baomidou.ant.mapper")
@ServletComponentScan
public class PlusApplication {
public static void main(String[] args) {
SpringApplication.run(PlusApplication.class, args);
}
}
Controller:(必須調用實例化HttpSession 纔會調用監聽器)
@Controller
public class SslController {
@RequestMapping("/")
public String index(HttpSession session) {
return "index";
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
1.ServletContextListener – 監聽servletContext對象的創建以及銷燬
1.1 contextInitialized(ServletContextEvent arg0) -- 創建時執行
1.2 contextDestroyed(ServletContextEvent arg0) -- 銷燬時執行
2.HttpSessionListener – 監聽session對象的創建以及銷燬
2.2 sessionCreated(HttpSessionEvent se) -- 創建時執行
2.2 sessionDestroyed(HttpSessionEvent se) -- 銷燬時執行
3.ServletRequestListener – 監聽request對象的創建以及銷燬
3.1 requestInitialized(ServletRequestEvent sre) -- 創建時執行
3.2 requestDestroyed(ServletRequestEvent sre) -- 銷燬時執行
4.ServletContextAttributeListener – 監聽servletContext對象中屬性的改變
4.1 attributeAdded(ServletContextAttributeEvent event) -- 添加屬性時執行
4.2 attributeReplaced(ServletContextAttributeEvent event) -- 修改屬性時執行
4.3 attributeRemoved(ServletContextAttributeEvent event) -- 刪除屬性時執行
5.HttpSessionAttributeListener --監聽session對象中屬性的改變
5.1 attributeAdded(HttpSessionBindingEvent event) -- 添加屬性時執行
5.2 attributeReplaced(HttpSessionBindingEvent event) -- 修改屬性時執行
5.3 attributeRemoved(HttpSessionBindingEvent event) -- 刪除屬性時執行
6.ServletRequestAttributeListener --監聽request對象中屬性的改變
6.1 attributeAdded(ServletRequestAttributeEvent srae) -- 添加屬性時執行
6.2 attributeReplaced(ServletRequestAttributeEvent srae) -- 修改屬性時執行
6.3 attributeRemoved(ServletRequestAttributeEvent srae) -- 刪除屬性時執行
監聽器是一個專門用於對其他對象身上發生的事件或狀態改變進行監聽和相應處理的對象,當被監視的對象發生情況時,立即採取相應的行動。
在springboot中,創建一個監聽器是很方便的,只需要根據需求實現上面的幾種監聽器的其中之一。然後在你創建的監聽器加上註解@WebListener ;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/**
* @Author: Galen
* @Date: 2019/6/25-15:11
* @Description:登陸監聽器
**/
@WebListener
public class LoginListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("---------------------------->請求創建");
}
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("---------------------------->請求銷燬");
}
}
最後,在啓動類加上註解@ServletComponentScan(basePackages = "com.apl.pgs.listener.*"),開啓監聽器。
basePackages =監聽器的 包名+類名 。可以開啓一個或多個。
這樣,監聽器就配置完成了,具體業務邏輯可以在監聽器做處理了。
本文參考博文 https://blog.csdn.net/zhaoxichen_10/article/details/93622162