作業(yè):
(一)監(jiān)聽器的概述
1态辛、什么是監(jiān)聽器監(jiān)聽器就是一個實現(xiàn)了特定接口的Java類闪唆,這個Java類用于監(jiān)聽另一個Java類的方法調(diào)用,或者屬性的改變廷蓉。當(dāng)被監(jiān)聽對象發(fā)生上述事件后掷漱,監(jiān)聽器某個方法將會立即被執(zhí)行
2粘室、監(jiān)聽器的用途用來監(jiān)聽其他對象的變化的,主要應(yīng)用在圖形化界面的開發(fā)上例如Java中的GUI卜范、Android等衔统,都有大量的監(jiān)聽器的使
3、監(jiān)聽器的術(shù)語事件源:指的是被監(jiān)聽對象(汽車)監(jiān)聽器:指的是監(jiān)聽的對象(報警器)事件源和監(jiān)聽器綁定:在汽車上安裝報警器事件:指的是事件源對象的改變(踹了汽車一腳)先朦,主要功能是獲得事件源對
(二)監(jiān)聽器的入門
1缰冤、監(jiān)聽器的入門程序
2、監(jiān)聽器的執(zhí)行過程
(三)Servlet中的監(jiān)聽器
一喳魏、Servlet中的監(jiān)聽器簡介在Servlet中定義了多種類型的監(jiān)聽器棉浸,它們用于監(jiān)聽的事件源分別是ServletContext、HttpSession和ServletRequest這三個域?qū)ο?/p>
二刺彩、Servlet中的監(jiān)聽器的分類
1迷郑、一類:監(jiān)聽三個域?qū)ο蟮膭?chuàng)建和銷毀的監(jiān)聽器(三個)
2、二類:監(jiān)聽三個域?qū)ο蟮膶傩宰兏▽傩蕴砑哟淳蟆⒁瞥撕Α⑻鎿Q)的監(jiān)聽器(三個)
3、三類:監(jiān)聽HttpSession中JavaBean的狀態(tài)改變(鈍化畦攘、活化霸妹、綁定、解除綁定)的監(jiān)聽(兩個)
(四)ServletContextListener監(jiān)聽器的使用
一知押、ServletContextListener監(jiān)聽器的作用用來監(jiān)聽ServletContext域?qū)ο蟮膭?chuàng)建和銷毀的監(jiān)聽器
二叹螟、ServletContext創(chuàng)建和銷毀
1、創(chuàng)建:在服務(wù)器啟動的時候台盯,為每個Web應(yīng)用創(chuàng)建單獨的ServletContext對象
2罢绽、銷毀:在服務(wù)器關(guān)閉的時候,或者項目從Web服務(wù)器中移除的時候
三静盅、ServletContextListener監(jiān)聽器的方法
1良价、監(jiān)聽ServletContext對象的創(chuàng)建contextInitialized(ServletContextEvent sce)
2、監(jiān)聽ServletContext對象的銷毀ontextDestroyed(ServletContextEvent sce)
四蒿叠、編寫監(jiān)聽器
1明垢、監(jiān)聽器的代碼
2、監(jiān)聽器的配置
五栈虚、ServletContextListener的企業(yè)用途
1袖外、加載框架的配置文件Spring框架提供了一個核心監(jiān)聽器叫ContextLoaderListener
2、定時任務(wù)調(diào)度
(五)HttpSessionListener監(jiān)聽器的使用
一魂务、HttpSessionListener監(jiān)聽器作用用來監(jiān)聽HttpSession對象的創(chuàng)建和銷毀
二曼验、HttpSession創(chuàng)建和銷毀創(chuàng)建:服務(wù)器端第一次調(diào)用getSession()方法的時候銷毀:非正常關(guān)閉服務(wù)器(正常關(guān)閉服務(wù)器Session會被序列化)Session過期(默認(rèn)過期時間30分鐘)手動調(diào)用session.invalidate()方法
三泌射、HttpSessionListener
監(jiān)聽器的方法
1、監(jiān)聽HttpSession對象創(chuàng)建sessionCreated(HttpSessionEvent se)
2鬓照、監(jiān)聽HttpSession對象銷毀sessionDestroyed(HttpSessionEvent se)
四熔酷、編寫監(jiān)聽器監(jiān)聽HttpSession對象創(chuàng)建和銷毀
1、監(jiān)聽器的代碼
2豺裆,監(jiān)聽器的配置
3拒秘、問題:訪問HTML是否會創(chuàng)建Session?訪問JSP是否會創(chuàng)建Session臭猜?訪問Servlet是否會創(chuàng)建Session躺酒?
(六)ServletRequestListener監(jiān)聽器的使用
一、ServletRequestListener監(jiān)聽器的作用用于監(jiān)聽ServletRequest對象的創(chuàng)建和銷毀
二蔑歌、ServletRequest對象的創(chuàng)建和銷毀創(chuàng)建:從客戶端向服務(wù)器發(fā)送一次請求羹应,服務(wù)器就會創(chuàng)建Request對象銷毀:服務(wù)器對這次請求作出了響應(yīng)之后,Request對象就銷毀了
三次屠、ServletRequestListener監(jiān)聽器的方法
1园匹、監(jiān)聽ServletRequest對象的創(chuàng)建requestInitialized(ServletRequestEvent sre)
2、監(jiān)聽ServletRequest對象的銷毀requestDestroyed(ServletRequestEvent sre)
四劫灶、編寫監(jiān)聽器代碼
1裸违、監(jiān)聽器代碼
2、監(jiān)聽器配置
3本昏、問題:訪問HTML頁面是否創(chuàng)建請求對象供汛?會訪問JSP頁面是否創(chuàng)建請求對象?會訪問Servlet是否創(chuàng)建請求對象涌穆?會
(七)統(tǒng)計當(dāng)前在線人數(shù)的案例
一紊馏、案例分析在服務(wù)器啟動的時候需要有一個初始值為零。當(dāng)瀏覽器訪問服務(wù)器上的某個JSP了蒲犬,就會創(chuàng)建Session,此時獲取初始值岸啡,進(jìn)行+1操作。如果Session銷毀了,獲取該值進(jìn)行-1操作
二蛤奢、代碼實現(xiàn)
1俭驮、創(chuàng)建ServletContextListener進(jìn)行初始化
2、創(chuàng)建HttpSessionListener
3悦荒、配置監(jiān)聽器
4唯欣、創(chuàng)建JSP頁面
(八)監(jiān)聽三個域?qū)ο蟮膶傩宰兏谋O(jiān)聽器
一、三類監(jiān)聽器
1搬味、ServletContextAttributeListener監(jiān)聽ServletContext對象中的屬性變更(屬性添加境氢、移除蟀拷、替換)的監(jiān)聽器attributeAdded(ServletContextAttributeEvent event)attributeRemoved(ServletContextAttributeEvent event)attributeReplaced(ServletContextAttributeEvent event)
2、HttpSessionAttributeListener監(jiān)聽HttpSession對象中的屬性變更(屬性添加萍聊、移除问芬、替換)的監(jiān)聽器attributeAdded(HttpSessionBindingEvent event)attributeRemoved(HttpSessionBindingEvent event)attributeReplaced(HttpSessionBindingEvent event)
3、ServletRequestAttributeListener監(jiān)聽ServletRequest對象中的屬性變更(屬性添加寿桨、移除此衅、替換)的監(jiān)聽attributeAdded(ServletRequestAttributeEvent srae)attributeRemoved(ServletRequestAttributeEvent srae)attributeReplaced(ServletRequestAttributeEvent srae)
二、演示第二類監(jiān)聽器
1亭螟、演示HttpSessionAttributeListener
2挡鞍、配置監(jiān)聽器
3、編寫測試的JSP
(九)監(jiān)聽HttpSession中Java類狀態(tài)改變的監(jiān)聽器
一预烙、第三類監(jiān)聽器概述
1墨微、保存在Session域中的Java類可以有多種狀態(tài):綁定到Session中、從Session中解除綁定默伍、隨Session對象持久化到一個存儲設(shè)備中(鈍化)欢嘿、隨Session對象從一個存儲設(shè)備中恢復(fù)(活化)
2、Servlet規(guī)范中中定義了兩個特殊的監(jiān)聽的接口也糊,來幫助Java類了解自己在Session域中的狀態(tài)炼蹦,分別是:HttpSessionBindingListener接口HttpSessionActivationListener接口實現(xiàn)了這兩接口的類,是不需要在web.xml中進(jìn)行配置的
二狸剃、HttpSessionBindingListener監(jiān)聽器
1掐隐、監(jiān)聽Java類在HttpSession中的綁定和解除綁定的狀態(tài)的監(jiān)聽器
valueBound(HttpSessionBindingEvent event)
valueUnbound(HttpSessionBindingEvent event)
2、測試代碼
三钞馁、HttpSessionActivationListener監(jiān)聽器
1虑省、監(jiān)聽HttpSession中Java類的鈍化和活化的監(jiān)聽器
sessionDidActivate(HttpSessionEvent se)
sessionWillPassivate(HttpSessionEvent se)
2、測試代碼
3僧凰、配置完成Session的序列化和反序列化Context標(biāo)簽可以配置在:Tomcat/conf/context.xml:所有Tomcat下虛擬主機和虛擬目錄下的工程都會序列化SessionTomcat/conf/Catalina? ?/local host/context.xml:只有l(wèi)ocal host虛擬主機下的所有項目會序列化Session工程/META-INF/context.xml:只有當(dāng)前工程才會序列化Sessio
(十)Filter
一探颈、Filter的概述
1、什么是FilterFilter稱為過濾器训措,它是Servlet技術(shù)中最實用的技術(shù)伪节,Web開發(fā)人員通過Filter技術(shù),對Web服務(wù)器所管理的資源(JSP绩鸣、Servlet怀大、靜態(tài)圖片、靜態(tài)html文件等)進(jìn)行攔截呀闻,從而實現(xiàn)一些特殊的功能Filte就是過濾從客戶端向服務(wù)器發(fā)送請求
2化借、為什么學(xué)習(xí)過濾器
二、Filter的入門
1捡多、第一步:編寫一個類實現(xiàn)Filter接口
2蓖康、第二步:對過濾器進(jìn)行配置
三铐炫、FilterC hain對象的概述
1、什么是FilterC hainFilterC hain過濾器鏈:在一個Web應(yīng)用中钓瞭,可以開發(fā)編寫多個Filter驳遵,這些Filter組合起來稱為是一個過濾器鏈Web服務(wù)器根據(jù)Filter在web.xml件中的注冊順序(mapping的配置順序)決定先調(diào)用哪個Filter,依次調(diào)用后面的過濾器山涡,如果沒有下一個過濾器堤结,則調(diào)用目標(biāo)資源
2、FilterC hain的演示
四鸭丛、Filter的生命周期
1竞穷、Filter的生命周期描述Filter的創(chuàng)建和銷毀是由web服務(wù)器負(fù)責(zé)。Web應(yīng)用程序啟動的時候鳞溉,Web服務(wù)器建Filter的實例對象瘾带,并調(diào)用其init方法進(jìn)行初始化的操作(Filter對象只會創(chuàng)建一次,ini方法也只會執(zhí)行一次)每次Filter進(jìn)行攔截的時候熟菲,都會執(zhí)行doFilter的方法當(dāng)服務(wù)器關(guān)閉的時候看政,或者應(yīng)用從服務(wù)器中移除的時候,服務(wù)器會銷Filter對象
2抄罕、FilterCon? ?fig對象的概述
(1)FilterCon? ?fi對象的作用:用來獲得Filter的相關(guān)的配置的對象
(2)FilterCon? ?fig對象的APIgetFilterName()getInitParameter(Stringname)getInitParameterNames()getServletContext()
3允蚣、FilterCon? ?fig的演示
五、過濾器的相關(guān)配置
1呆贿、<url-pattern >的配置完全路徑匹配:以/開始嚷兔,例如/aaa/aabbb目錄匹配:以/開始,例如/*/aaa/*/aaa/bbb/*擴展名匹配:不能以/開始做入,以*開始冒晰,例如*.jsp *.do*.action
2、<servlet -name>的配置專門以Servlet的配置的名稱攔截Servlet
3竟块、<dispatc her>的配置默認(rèn)的情況下壶运,過濾器會攔截請求,如果進(jìn)行轉(zhuǎn)發(fā)(需要攔截這次轉(zhuǎn)發(fā))dispatc her的取值有四個:REQUEST:默認(rèn)值浪秘。默認(rèn)過濾器攔截的就是請求FORWARD:轉(zhuǎn)發(fā)INCLUDE:頁面包含的時候進(jìn)行攔截ERROR:頁面出現(xiàn)全局錯誤頁面跳轉(zhuǎn)的時候進(jìn)行攔截
(十一)權(quán)限驗證過濾器
一前弯、案例需求現(xiàn)在一個網(wǎng)站上需要有登錄的功能,在登錄成功后秫逝,重定向到后臺的成功頁面(后臺的頁面有很多)。如果現(xiàn)在沒有登錄询枚,直接在地址欄上輸入后臺頁面地址編寫一個過濾器违帆,可以對沒有登錄的用戶進(jìn)行攔截(沒有登錄,回到登錄頁面金蜀;如果已經(jīng)登錄刷后,放行)
二的畴、案例登錄功能
1、創(chuàng)建表(MySQL執(zhí)行如下語句)create databaseweb05charset utf8;use web05;create table user(id int primarykey auto _increment,userna me varchar(20),password varchar(20))charset ut f8;insert into user values (null,'aaa','123');
2尝胆、搭建項目的環(huán)境
3丧裁、代碼實現(xiàn)
三、權(quán)限驗證的過濾器實現(xiàn)
(十二)通用的字符集編碼過濾器的分析
一含衔、案例需求假設(shè)網(wǎng)站需要向后臺提交中文的數(shù)據(jù)(有可能是GET煎娇,也有可能是POST),中文處理根據(jù)不同的請求方式贪染,處理的方式也是不同的需要調(diào)用request.getParameter() ;方法接收數(shù)據(jù)缓呛,但是這時會存在亂碼,如果想調(diào)用request.getParameter()方法杭隙,無論是get還是post請求哟绊,提交的中文都沒有亂
二、增強一個類的方法
1痰憎、通過上面的分析票髓,現(xiàn)在要增強request的getParameter方法,增強的過程要寫在過濾器當(dāng)中
(1)如何增強一個類中的方法铣耘?
1)繼承必須要能夠控制這個類的構(gòu)造
2)裝飾者被增強的類和增強的類需要實現(xiàn)相同的接口在增強的類中獲得被增強的類的引用缺點:接口中的方法過多洽沟,會導(dǎo)致要重寫很多其他的方法
3)動態(tài)代理類需要實現(xiàn)接口
三、通用的字符集編碼過濾器的代碼實現(xiàn)
1涡拘、過濾器的代碼
2玲躯、增強類的代碼