application:上下文對象,是由容器建立和初始化的,它的範圍是整個的web應用,並且整個web應用中只會有一個 application對象存在,當web服務器關閉時,就會將application對象銷燬 session:是一種保存上下文信息的機制,它是針對每一個會話的,它是放在服務器端,經過SessionId區分的,在瀏覽器和服務器結束後,都會將session銷燬 request對象:是當客戶端發送請求時,容器就會建立一個ServletRequest對象,來進行封裝請求數據,同時會建立一個servletResponse對象來進行封裝相應數據,當結束封裝請求以後,就會銷燬該對象 WEB監聽器,就是監聽這3個對象的建立,銷燬,和它們的屬性發生的變化
1,統計在線人數和在線用戶。 2,系統啓動時加載初始化信息。 3,統計網站訪問量。 4,跟Spring結合。java
實現了ServletContextListener接口,建立一個監聽源爲ServletContext的監聽器,當服務器啓動時,便會建立application對象並調用初始化方法.能夠經過初始化方法的參數來對application對象作出一些操做.web
當服務器關閉,application對象銷燬時,也會調用監聽器的銷燬方法,也能夠經過參數來做出一些操做.初始化方法和銷燬方法中的參數是ServletContextEvent的對象,所以能夠經過參數來獲取到application對象來對其操做(得到初始化參數).數據庫
1.編寫java程序瀏覽器
public class FirstListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("contextInitialized"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("contextDestroyed"); } }
2.配置web.xml服務器
<listener> <listener-class>onetry.Listener.FirstListener<stener-class> <stener>
1.按監聽器的對象劃分: a 用戶監聽應用程序環境對象(ServletContext)的事件監聽器 b 用於監聽用戶會話對象(HttpSession)的事件監聽器 c 用於監聽請求消息對象(ServletRequest)的事件監聽器。 2.按事件劃分 a 監聽域對象自身的建立和銷燬的事件監聽器 b 監聽域對象中的屬性的增長和刪除的事件監聽器 c 監聽綁定到HttpSession域中的某個對象的狀態的事件監聽器 ServletContext的建立和銷燬 實現ServletContextListener接口用於監聽它的建立和銷燬事件 一個項目中能夠有多個ServletContextListener,可是隻有一個ServletContext對象 有兩個事件處理方法: (1)contextInitialized方法: public void contextInitialized( ServletContextEvent sce ) 參數 ServletContextEvent 事件對象,能夠獲取ServletContext對象以及一些初始化參數 例如: 獲取ServletContext對象: ServletContext sc = sce.getServletContext(); 獲取初始化參數: sc.getInitParmeter("參數名稱"); 初始化參數在web.xml中配置: <context-param> <param-name>initParam</param-name> <param-value>imooc</param-value> </context-param> 2.設置ServletContext屬性:sc.setAttribute("name",obj); 而後在其它地方獲取getAttribute("name") (2)contextDestroyed方法: public void contextDestroyed( ServletContextEvent sce ) ServletContext銷燬時調用 主要用於數據庫連接關閉時釋放一些資源,以避免過分的佔用。
HttpSession的建立和銷燬 實現HttpSessionListener接口用於監聽它的建立和銷燬事件 一個HttpSession能夠註冊多個HttpSessionListener接口, 一個web應用中能夠有多個HttpSession對象 有兩個事件處理方法: sessionCreated方法: public void sessionCreated(HttpSessionEvent se) session建立時調用 sessionDestroyed方法: public void sessionDestroyed(HttpSessionEvent se) session銷燬時調用 HttpSessionListener的主要用途: 統計在線人數 記錄訪問日誌,記錄訪問時間、訪問的ip /** * 銷燬session * 1.關閉服務器 * 2.關閉瀏覽器 * 3.不關閉瀏覽器,session超時 */ 不關閉瀏覽器,session超時 能夠在web.xml配置session超時的時間 <session-config> <session-timeout>0<ssion-timeout> <ssion-config> 0:沒有超時的限制 1:超時1分鐘後銷燬,可是並非準確的一分鐘
實現ServletRequestListener接口用於監聽它的建立和銷燬事件 一個ServletRequest能夠註冊多個ServletRequestListener接口, 有兩個事件處理方法: requestInitialized方法: public void requestInitialized(ServletRequestEvent sre) request建立時調用 參數ServletRequestEvent能夠獲取ServletRequest對象 ServletRequest sr = sre.getServletRequest() 進而獲取初始化參數:sr.getInitParmeter("") requestDestroyed方法: public void requestDestroyed(ServletRequestEvent sre) request銷燬時調用 ServletRequest的主要用途: 讀取參數 記錄訪問歷史 request監聽的是用戶的每個訪問請求 Ps:別忘了監聽器的web設置。
request.getAttribute()只能經過 request.setAttribute("name",參數)來獲取; request.getParameter()則經過URL參數,或前連接頁面關係的參數來獲取
監聽器的分類-按監聽事件劃分: 一、監聽器綁定到HttpSession域中的某個對象的狀態事件監聽器; 二、HttpSession中的對象狀態: (1)綁定:經過setAttribute(); (2)解除綁定:removeAttribute(); (3)鈍化:將session對象序列化到存儲設備上 (4)活化:將session對象從存儲設備上進行恢復 三、session鈍化機制: (1)把服務器中不常使用的session對象暫時的序列化到系統文件或是數據庫中,當使用時反序列化到內存中,整個過程有服務器自動完成。 (2)session的鈍化機制由SessionManager管理 四、實現綁定和解除綁定,建立一個【普通的javabean】綁定和解除綁定需實現【HttpSessionBindingListener】接口; 實現鈍化和活化,需實現HttpSessionActivationListener接口和Serializable接口