1. 程式人生 > >Servlet(三) 監聽器

Servlet(三) 監聽器

周期 placed tlist tran 取數據 其他 unbound ati 兩種

Servlet監聽器

所有事件都繼承自 java.util.Event

分成三類:application範圍、session範圍和request範圍

  • 監聽器接口和註冊

    • javax.servlet.ServletContextListener: 響應 ServletContext生命周期事件,Context創建之後,關閉之前會被調用
    • javax.servlet.ServletContextAttributeListener: 響應Context範圍的屬性 增刪替換
    • javax.servlet.http.HttpSessionListener: 響應session創建 超時 失效事件
    • javax.servlet.http.HttpSessionAttributeListener:
    • javax.servlet.http.HttpSessionActivationListener: 響應session失效 激活事件
    • javax.servlet.http.HttpSessionBindingListener: 響應HttpSession中有 添加 刪除 值時
    • javax.servlet.ServletRequestListener: 響應ServletRequest的創建or刪除
    • javax.servlet.ServletRequestAttributeListener:
    • javax.servlet.AsyncListener: 異步操作監聽器
  • Servlet3.0 - 3.1 兩種方法實現

    • @WebListener
      public class ListenerClass implements ListenerInterface{}
    • <listener>
          <listener-class>fully-qualified listener class </istener-class>
      </listener>
  • javax.servlet.ServletContextListener

    • public interface ServletContextListener extends EventListener {
          void contextInitialized(ServletContextEvent var1);
      
          void contextDestroyed(ServletContextEvent var1);
      }
      
      //監聽器方法入參類型
      public class ServletContextEvent extends EventObject {
          private static final long serialVersionUID = 1L;
      
          public ServletContextEvent(ServletContext source) {
              super(source);
          }
      
          public ServletContext ServletContextEvent() {
              return (ServletContext)super.getSource();
          }
      }
    • 通過入參ServletContextEvent中的ServletContextEvent()可以獲取應用上下文獲取數據

    • 對ServletContext創建和銷毀做出反應

  • javax.servlet.ServletContextAttributeListener

    • public interface ServletContextAttributeListener extends EventListener {
          void attributeAdded(ServletContextAttributeEvent var1);
      
          void attributeRemoved(ServletContextAttributeEvent var1);
      
          void attributeReplaced(ServletContextAttributeEvent var1);
      }
      
      
      
      //監聽器方法入參類型
      public class ServletContextAttributeEvent extends ServletContextEvent {
          private static final long serialVersionUID = 1L;
          private final String name;
          private final Object value;
      
          public ServletContextAttributeEvent(ServletContext source, String name, Object value) {
              super(source);
              this.name = name;
              this.value = value;
          }
      
          public String getName() {
              return this.name;
          }
      
          public Object getValue() {
              return this.value;
          }
      }
      
  • javax.servlet.http.HttpSessionListener

    • public interface HttpSessionListener extends EventListener {
          void sessionCreated(HttpSessionEvent var1);
      
          void sessionDestroyed(HttpSessionEvent var1);
      }
      
      
      //監聽器方法入參類型
      public class HttpSessionEvent extends EventObject {
          private static final long serialVersionUID = 1L;
      
          public HttpSessionEvent(HttpSession source) {
              super(source);
          }
      
          public HttpSession getSession() {
              return (HttpSession)super.getSource();
          }
      }
  • javax.servlet.http.HttpSessionActivationListener

    • public interface HttpSessionAttributeListener extends EventListener {
          void attributeAdded(HttpSessionBindingEvent var1);
      
          void attributeRemoved(HttpSessionBindingEvent var1);
      
          void attributeReplaced(HttpSessionBindingEvent var1);
      }
      
      
      
      //監聽器方法入參類型
      public class HttpSessionBindingEvent extends HttpSessionEvent {
          private static final long serialVersionUID = 1L;
          private final String name;
          private final Object value;
      
          public HttpSessionBindingEvent(HttpSession session, String name) {
              super(session);
              this.name = name;
              this.value = null;
          }
      
          public HttpSessionBindingEvent(HttpSession session, String name, Object value) {
              super(session);
              this.name = name;
              this.value = value;
          }
      
          public HttpSession getSession() {
              return super.getSession();
          }
      
          public String getName() {
              return this.name;
          }
      
          public Object getValue() {
              return this.value;
          }
      }
    • HttpSessionBindingEvent extends HttpSessionEvent 所以 在HttpSessionBindingEvent 也能夠拿到HttpSession對象
  • javax.servlet.http.HttpSessionActivationListener
    在分布式環境下,會用多個容器來進行負載均衡,有可能需要將session保存起來,在容器之間傳遞,ex一個容器內存不足,會將很少用到的對象轉存刀其他容器上,這時候就會通知HttpSessionActivationListener

    • public interface HttpSessionActivationListener extends EventListener {
          //鈍化
          void sessionWillPassivate(HttpSessionEvent var1);
          //活化
          void sessionDidActivate(HttpSessionEvent var1); 
      }
  • javax.servlet.http.HttpSessionBindingListener

    • public interface HttpSessionBindingListener extends EventListener {
          void valueBound(HttpSessionBindingEvent var1);
      
          void valueUnbound(HttpSessionBindingEvent var1);
      }
  • javax.servlet.ServletRequestListener

    • public interface ServletRequestListener extends EventListener {
          void requestDestroyed(ServletRequestEvent var1);
      
          void requestInitialized(ServletRequestEvent var1);
      }
      
      
      
      //監聽器方法入參類型
      public class ServletRequestEvent extends EventObject {
          private static final long serialVersionUID = 1L;
          private final transient ServletRequest request;
      
          public ServletRequestEvent(ServletContext sc, ServletRequest request) {
              super(sc);
              this.request = request;
          }
      
          public ServletRequest getServletRequest() {
              return this.request;
          }
      
          public ServletContext getServletContext() {
              return (ServletContext)super.getSource();
          }
      }
  • javax.servlet.ServletRequestAttributeListener

    • public interface ServletRequestAttributeListener extends EventListener {
          void attributeAdded(ServletRequestAttributeEvent var1);
      
          void attributeRemoved(ServletRequestAttributeEvent var1);
      
          void attributeReplaced(ServletRequestAttributeEvent var1);
      }

Servlet(三) 監聽器