天天看點

【監聽器】知識方法總結

【監聽器】知識方法總結

  【定義】:事件源:發生事件的源頭,監聽器需要監聽的對象。

                    事件:事件源上發生的動作,監聽器監聽的内容。

                    監聽器:負責監聽事件源的對象。

                    監聽器主要負責監聽這三個對象: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了...");
    }
}
           

繼續閱讀