servlet監聽器

application:上下文對象,是由容器建立和初始化的,它的範圍是整個的web應用,並且整個web應用中只會有一個 application對象存在,當web服務器關閉時,就會將application對象銷燬

session:是一種保存上下文信息的機制,它是針對每一個會話的,它是放在服務器端,經過SessionId區分的,在瀏覽器和服務器結束後,都會將session銷燬

request對象:是當客戶端發送請求時,容器就會建立一個ServletRequest對象,來進行封裝請求數據,同時會建立一個servletResponse對象來進行封裝相應數據,當結束封裝請求以後,就會銷燬該對象 WEB監聽器,就是監聽這3個對象的建立,銷燬,和它們的屬性發生的變化
  • 什麼是web監聽器

 

  • Web監聽器的用途:

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的事件監聽器

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分鐘後銷燬,可是並非準確的一分鐘
  • ServletRequest的事件監聽器

實現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域中的某個對象的狀態事件監聽器;
二、HttpSession中的對象狀態:
(1)綁定:經過setAttribute();
(2)解除綁定:removeAttribute();
(3)鈍化:將session對象序列化到存儲設備上
(4)活化:將session對象從存儲設備上進行恢復
三、session鈍化機制:
(1)把服務器中不常使用的session對象暫時的序列化到系統文件或是數據庫中,當使用時反序列化到內存中,整個過程有服務器自動完成。
(2)session的鈍化機制由SessionManager管理
四、實現綁定和解除綁定,建立一個【普通的javabean】綁定和解除綁定需實現【HttpSessionBindingListener】接口;
實現鈍化和活化,需實現HttpSessionActivationListener接口和Serializable接口
  • web3.0以後使用註解實現監聽器

相關文章
相關標籤/搜索