監聽器的配置,繫結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物件的建立:requestInitialized(ServletRequestEvent src)
監聽ServletRequest物件的銷燬::requestDestroyed(ServeltRequestEvent 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
監聽HttpSession中Java類狀態改變的監聽器
第三類監聽器概述
儲存在Session域中的Java類可以有多種狀態:繫結到session中;從session中解除繫結;隨session物件持久化到一個儲存裝置中(鈍化);隨session物件從一個儲存裝置中恢復(活化)。
Servlet對方中定義了兩個特殊的監聽的介面來幫助Java類瞭解自己在Session域中的狀態:
HttpSessionBindingListener介面 繫結和解綁的介面
HttpSessionActivationListener介面, 鈍化和活化的介面
實現這兩個介面的類不需要在web.xml中進行配置。
HttpSessionBindingListener監聽器:
HttpSessionBindingListener介面:用來監聽Java類在HttpSession中的繫結和解除繫結的狀態的監聽器:(繫結必須是java物件 才是繫結)
valueBound(HttpSessionBindingEvent event);繫結監聽器
valueUnBound(HttpSessionBindingEvent event);解除繫結監聽器
繫結也是用set ,解除繫結用remove
測試程式碼:
HttpSessionActivationListener監聽器
監聽HttpSession中Java類的鈍化和活化監聽器。
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伺服器所管理的資源(JSP,Servlet,靜態圖片或靜態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伺服器根據Filter在web.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:頁面出現全域性錯誤頁面跳轉的時候進行攔截
如何增強一個類中的方法?
繼承
必須要能夠控制這個類的構造。
裝飾者
被增強的類和增強的類需要實現相同的介面。
在增強的類中獲得被增強的類的引用。
缺點:介面中的方法過多,重寫很多其他的方法。
動態代理
類需要實現介面。