【監聽器】知識方法總結
【定義】:事件源:發生事件的源頭,監聽器需要監聽的對象。
事件:事件源上發生的動作,監聽器監聽的内容。
監聽器:負責監聽事件源的對象。
監聽器主要負責監聽這三個對象:request,session,ServletContext
【分類】:
a).監聽request、ServletContext 、session對象的建立和銷毀 ServletRequestListener、ServletContextListener、HttpSessionListener
b).監聽request、session、ServletContext 對象存放的資料變化情況ServletContextAttributeListener 、HttpSessionAttributeListener 、ServletRequestAttributeListener
c).監聽session中儲存的JavaBean的狀态HttpSessionBindingListener
【實作類】:
MyServletRequestListener :
package com.caox.listen;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/**
* @author : nazi
* @version : 1.0
* @date : 2019/3/7 9:43
*/
@Slf4j
@WebListener
public class MyServletRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
log.info("MyServletRequestListener--------requestDestroyed");
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
log.info("MyServletRequestListener--------requestInitialized");
}
}
MyHttpSessionListener:
package com.caox.listen;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @author : nazi
* @version : 1.0
* @date : 2019/3/7 9:47
*/
@Slf4j
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
log.info("MyHttpSessionListener--------sessionCreated");
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
log.info("MyHttpSessionListener--------sessionDestroyed");
}
}
MyServletContextListener:
package com.caox.listen;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* @author : nazi
* @version : 1.0
* @date : 2019/3/7 9:44
*/
@Slf4j
@WebListener
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
log.info("MyServletContextListener--------contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
log.info("MyServletContextListener--------contextDestroyed");
}
}
【注意】:request是使用者的請求,請求就是一瞬間的過程, 而session表示的是我們的會話視窗,就像打開一個淘寶網頁一樣,你沒有完全關閉它,它是不會結束的, session的結束取決于session的生命周期
【監聽對象存放的資料變化情況】:
監聽器的接口----監聽對象
(1)ServletContextAttributeListener----ServletContext對象中的屬性的變化情況
(2)HttpSessionAttributeListener----session對象中的屬性的變化情況
(3)ServletRequestAttributeListener----request對象中的屬性的變化情況
MyHttpSessionAttributeListener:
package com.caox.listen;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/**
* @author : nazi
* @version : 1.0
* @date : 2019/3/7 9:54
*/
@Slf4j
@WebListener
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
log.info("MyHttpSessionAttributeListener----------attributeAdded");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
log.info("MyHttpSessionAttributeListener----------attributeRemoved");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
log.info("MyHttpSessionAttributeListener----------attributeReplaced");
}
}
【監聽屬性和Bean】:
屬性監聽:是對三個容器中的任何屬性(包括對象和不是對象的資料,基本類型資料)的變化,進行監聽
Bean監聽:它隻監聽javabean對象往session中儲存和session中移出的過程。
其中Bean監聽實作HttpSessionBindingListener,重寫方法即可:
package com.caox.listen;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
/**
* @author : nazi
* @version : 1.0
* @date : 2019/3/7 10:10
*/
@Setter
@Getter
@ToString
@Slf4j
public class User implements HttpSessionBindingListener {
private int age;
private String name;
private String sex;
@Override
public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
// 當session綁定我們的user的時候執行這個方法
log.info("session将user綁定啦~");
}
@Override
public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
// 當session解綁我們的user的時候執行這個方法
log.info("負心的session不要我們的user了...");
}
}