Servlet(三) 監聽器
阿新 • • 發佈:2018-11-13
周期 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一個容器內存不足,會將很少用到的對象轉存刀其他容器上,這時候就會通知HttpSessionActivationListenerpublic 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(三) 監聽器