1. 程式人生 > >監聽器的配置,繫結HttpSessionListener監聽器的使用

監聽器的配置,繫結HttpSessionListener監聽器的使用

監聽器的配置,繫結

<listener>

<listener-class>監聽器的全路徑</listener-class>

</listener>

ServletContextListener企業用途

載入框架的配置檔案:

Spring框架提供了一個核心監聽器ContextLoaderListener

定時任務排程:

HttpSessionListener監聽器的使用

HttpSessionListener監聽器(實現介面)  用來監聽HttpSession域 物件的建立和銷燬

HttpSessionListener監聽器作用

用來監聽HttpSession物件的建立和銷燬。

HttpSession建立和銷燬

建立:伺服器端第一次呼叫getSession()方法時候。

銷燬:非正常關閉伺服器(正常關閉伺服器session會被序列化)。

Session過期(預設過期時間30分鐘)。

手動呼叫session.invalidate()方法。

HttpSessionListener監聽器的方法

監聽HttpSession物件建立

sessionCreated(HttpSessionEvent  se)

監聽HttpSession物件銷燬

sessionDestroyed(HttpSessionEvent  se)

編寫監聽器監聽HttpSession物件建立和銷燬

監聽器程式碼

監聽器的配置,繫結

<listener>

<listener-class>監聽器的全路徑</listener-class>

</listener>

訪問HTML是否建立Session :不會

訪問JSP是否建立Session :會

訪問Servlet是否建立Session :不會(預設沒有呼叫getSession方法)

ServletRequestListener監聽器的使用

ServletRequestListener監聽器(實現介面) 用來監聽ServletRequest域物件的建立和銷燬

ServletRequestListener監聽器作用

使用者監聽ServletRequest物件的建立和銷燬

ServletRequest物件的建立和銷燬

建立從客戶端向伺服器傳送一次請求,伺服器就會建立request物件。

銷燬伺服器對這次請求作出了響應之後,request物件就銷燬了。

ServletRequestListener監聽器的方法

監聽ServletRequest物件的建立requestInitializedServletRequestEvent src

監聽ServletRequest物件的銷燬requestDestroyedServeltRequestEvent src

編寫監聽器程式碼

監聽器程式碼

監聽器配置

<listener>

<listener-class>監聽器的全路徑</listener-class>

</listener>

訪問HTML頁面是否建立請求物件 :會

訪問JSP頁面是否建立請求物件 :會

訪問Servlet是否建立請求物件 :會

監聽三個域物件的屬性變更的監聽器

ServletContextAttributeListener:(也是需要實現)監聽ServletContext物件中的屬性變更(屬性新增,移除,替換)的監聽器

attributeAdded(canshu);  新增屬性監聽器

attributeRemoved(canshu);  移除屬性監聽器

attributeReplaced(canshu):替換屬性監聽器

HttpSessionAttributeListener監聽HttpSession物件中的屬性變更(屬性新增,移除,替換)的監聽器

attributeAdded(canshu);  新增屬性監聽器

attributeRemoved(canshu);  移除屬性監聽器

attributeReplaced(canshu):替換屬性監聽器

ServletRequestAttributeListener監聽ServletRequest物件中的屬性變更(屬性新增,移除,替換)的監聽器

attributeAdded(canshu);  新增屬性監聽器

attributeRemoved(canshu);  移除屬性監聽器

attributeReplaced(canshu):替換屬性監聽器

演示第二類監聽器(三個域的屬性監聽器 用法都一樣

演示HttpSessionAttributeListener

程式碼編寫

web.xml配置監聽器

編寫測試的JSP

監聽HttpSessionJava類狀態改變的監聽器

第三類監聽器概述

儲存在Session域中的Java類可以有多種狀態:繫結到session中;從session中解除繫結;隨session物件持久化到一個儲存裝置中(鈍化);隨session物件從一個儲存裝置中恢復(活化)。

Servlet對方中定義了兩個特殊的監聽的介面來幫助Java類瞭解自己在Session域中的狀態:

HttpSessionBindingListener介面  繫結和解綁的介面

HttpSessionActivationListener介面, 鈍化和活化的介面

實現這兩個介面的類不需要在web.xml中進行配置。

HttpSessionBindingListener監聽器:

HttpSessionBindingListener介面:用來監聽Java類在HttpSession中的繫結和解除繫結的狀態的監聽器:(繫結必須是java物件 才是繫結

valueBoundHttpSessionBindingEvent event);繫結監聽器

valueUnBoundHttpSessionBindingEvent event);解除繫結監聽器

 繫結也是用set ,解除繫結用remove

測試程式碼:

HttpSessionActivationListener監聽器

監聽HttpSessionJava類的鈍化和活化監聽器。

sessionDidActivate(HttpSessionEvent se); 活化監聽器

sessionWillPassivate(HttpSessionEvent se); 鈍化監聽器 需要實現序列化介面

測試程式碼

配置完成session的序列化和反序列化

Context標籤可以配置在:

tomcat/conf/context.xml  :所有tomcat下虛擬主機和虛擬目錄下的工程都會序列化session

tomcat/conf/Catalina/localhost/context.xml :localhost虛擬主機下的所有專案會序列化session

工程/META-INF/context.xml :當前工程才會序列化session

<Context>

<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">

<Store className="org.apache.catalina.session.FileStore" directory="javaee"/>

</Manager>

</Context>

Filter的概述

Filter稱為過濾器,它是Servlet技術中最實用的技術,web開發人員通過Filter技術,對web伺服器所管理的資源(JSPServlet,靜態圖片或靜態html檔案)進行攔截,從而實現一些特殊的功能。

Filter就是過濾從客戶端向伺服器傳送的請求。

為什麼學習過濾器

Filter的入門

Filter的入門

第一步:編寫一個類實現Filter介面

第二步:對過濾器進行配置

<filter>

<filter-name>filterName</filter-name>

<filter-class>quanlujing</filter-class>

<filter>

<filter-mapping>

<filter-name>filterName</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

FilterChain物件的概述

FilterChain物件的概述

什麼是FilterChain

FilterChain過濾器鏈:在一個web應用中,可以開發編寫多個Filter,這些Filter組合起來稱為是一個過濾器鏈。

Web伺服器根據Filterweb.xml檔案中的註冊順序(mapping的配置順序)決定先呼叫Filter。依次呼叫後面的過濾器,如果沒有下一個過濾器,呼叫目標資源

FilterChain的演示

Filter的生命週期

Filter的生命週期描述

Filter的建立和銷燬是由web伺服器負責。Web應用程式啟動的時候,web伺服器建立Filter的例項物件。並呼叫其init方法進行初始化(filter物件只會建立一次,init方法也只會執行一次)。

每次filter進行攔截的時候,都會執行doFilter的方法。

當伺服器關閉(正常關閉)的時候,應用從伺服器中移除的時候,伺服器會銷燬Filter物件。

FilterConfig物件的概述

FilterConfig物件的概述

FilterConfig物件的作用:

用來獲得Filter的相關的配置的物件。

FilterConfig物件的API:的方法 (用filerConfig呼叫)

getFilterName(); 獲得過濾器的名稱

getInitParameter(String  name);  獲取指定的引數

getInitParameterNames(); 獲取所有初始化引數的名稱 (返回的是列舉型別的)hasMoreElements()在遍歷列舉的時候 判斷是否有下一個引數

getServletContext();

FilterConfig的演示

過濾器的相關配置

過濾器的相關配置

<url-pattern>的配置

完全路徑匹配 :以/開始   比如/aaa  /aaa/bbb

目錄匹配 :以/開始 以*結束  比如/*  /aaa/*  /aaa/bbb/*

副檔名匹配    :不能以/開始 以*開始 比如*.jsp  *.do   *.action

<servlet-name>的配置

專門以Servlet的配置的名稱攔截Servlet

<dispatcher>的配置

預設的情況下過濾器會攔截請求。如果進行轉發(需要攔截這次轉發)。

dispatcher的取值(在filter-mapping 標籤下面設定dispatcher標籤

REQUEST:預設值。預設過濾器攔截的就是請求。

FORWARD:轉發。 配置之後 過濾器攔截轉發

INCLUDE:頁面包含的時候進行攔截 

ERROR:頁面出現全域性錯誤頁面跳轉的時候進行攔截

如何增強一個類中的方法?

繼承

必須要能夠控制這個類的構造。

裝飾者

被增強的類和增強的類需要實現相同的介面。

在增強的類中獲得被增強的類的引用。

缺點:介面中的方法過多,重寫很多其他的方法。

動態代理

類需要實現介面。