正對WEB環境的監聽
主要有三類:
1.ServletContext:對servlet上下文(application對象)進行監聽
2.Session:對session監聽
3.Request:對request的監聽
主要是:ServeltContext.Session的監聽
在WEB端實現監聽實質:
實現一系列的監聽接口(實現相應的接口,覆寫各接口中相應的方法,在相應的事件觸發的時候會執行自己的監聽器中的覆寫的方法,在各個方法中完成自己想要的操作,從而實現了監聽)
監聽--就是在進行某種各個範圍(application,session,request)中有相關值的設置、修改、替換的時候,這些操作都會觸發事件,而java中事件的代理機制,事件處理是利用listener機制,所以爲了在事件觸發的時候能夠使自己能夠採取相應的措施,就需要---->繼承這樣的listener,在listener中覆寫相應的方法,覆寫相應的事件處理方法,在對應的方法中處理對應的事件,也就是進行了監聽
ServletContext---javax.servlet.ServletContext
1.ServletContextListener---對整個Servlet上下文進行監聽(啓動、銷燬)
public void contextInitialized(ServletConfigEvent sce)---上下文初始化
public void contextDestroyed(ServletConfigEvent sce)--上下文的銷燬
ServletConfigEvent
public ServletContext getServletContext()--就是取得application對象
2.ServletContextAttributeListener---對Servlet上下文的屬性的監聽
public void attributeAdded(ServletContextAttributeEvent scab):增加屬性
public void attributeRemoved(ServletContextAttributeEvent scab) :移除屬性
public void attributeReplaced(ServletContextAttributeEvent scab) :替換屬性(第二次設置統一屬性的值)
ServletContextAttributeEvent
public java.lang.String getName()---得到屬性的名稱
public java.lang.Object getValue()--得到屬性的值
與setAttribute(String name,Object value)是對應的
web.xml中的配置 ---跟過濾器一樣是組件式的工作方式
<listener>
<listener-class>****</listener-class>
</listener>
上下文監聽(ServletContext監聽)主要是針對容器的初始化、容器銷燬、屬性操作
session監聽是對session的創建、銷燬和屬性操作
session是HTTP寫一下的類容,所以是javax.servlet.http包中
javax.servlet.http Interface HttpSessionListener
public void sessionCreated(HttpSessionEvent se)---session創建
public void sessionDestroyed(HttpSessionEvent se)---session銷燬
HttpSessionEvent
public HttpSessionEvent(HttpSession source)--取得當前的session
javax.servlet.http Interface HttpSessionAttributeListener
--public void attributeAdded(HttpSessionBindingEvent se)
--public void attributeRemoved(HttpSessionBindingEvent se)
--public void attributeReplaced(HttpSessionBindingEvent se)
javax.servlet.http Class HttpSessionBindingEvent
--public HttpSession getSession()
--public java.lang.String getName()
--public java.lang.Object getValue()
頁面中:session.setAttribute()觸發了兩個事件----session創建和屬性增加
session銷燬有兩種方式:
1.session超時(web.xml)
·<session-config>
<time-out>時間</time-out> #單位爲分鐘,在達到這個時間之後session失效,並觸發sessionDestroyed事件
</session-config>
2.手動使session失效
invalidate()---session.invalidate()手動調用invalidate方法使session失效
二者都會使session失效,並觸發sessionDestroyed事件----這就是我們使用的“註銷”
監聽器的使用案例:
統計當前在線人員