java_web_5-filter-listener_第1頁
java_web_5-filter-listener_第2頁
java_web_5-filter-listener_第3頁
java_web_5-filter-listener_第4頁
java_web_5-filter-listener_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java WebJava Web開發(fā)開發(fā)第五課第五課 FilterFilter與與ListenerListener講師:李玉明講師:李玉明目標(biāo)lFilterlListenerFilterlFilter技術(shù)是servlet2.3增加的功能;lWEB開發(fā)人員通過Filter技術(shù),對(duì)web服務(wù)器管理的所有web資源:例如Jsp,Servlet,靜態(tài)圖片文件或靜態(tài)html文件等進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊的功能。例如實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問控制、過濾敏感詞匯、壓縮響應(yīng)信息等一些高級(jí)功能。示意圖lFilter和servlet的對(duì)應(yīng)關(guān)系為多對(duì)多的關(guān)系:可以配置一個(gè)filter到一個(gè)或多個(gè)servlet;一個(gè)

2、servlet可以有多個(gè)filter。l一個(gè)filter必須實(shí)現(xiàn)javax.servlet.Filter接口并定義三個(gè)方法:1.voidinit(FilterConfigconfig);2.voiddestroy();3.voiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)FilterFileter生命周期Filter的創(chuàng)建和銷毀由WEB服務(wù)器負(fù)責(zé)。1在應(yīng)用啟動(dòng)的時(shí)候裝載Filter類(與Servlet的load-on-startup配置效果相同)。2容器創(chuàng)建好Filter對(duì)象,調(diào)用init()方法。接著被Web

3、容器保存進(jìn)應(yīng)用級(jí)的集合容器中,等待用戶訪問資源。3當(dāng)用戶訪問的資源正好被Filter的url-pattern攔截時(shí),容器會(huì)取出Filter類調(diào)用doFilter方法,下次或多次訪問被攔截的資源時(shí),Web容器會(huì)直接取出指定Filter對(duì)象實(shí)例調(diào)用doFilter方法(Filter對(duì)象常駐留Web容器了)。4當(dāng)應(yīng)用服務(wù)被停止或重新裝載了,則會(huì)執(zhí)行Filter的destroy方法,F(xiàn)ilter對(duì)象銷毀。init與destroy方法只會(huì)執(zhí)行一次。示例publicclassLogFilterimplementsFilterFilterConfigconfig;publicvoidinit(FilterC

4、onfigconfig)this.config=config;publicFilterConfiggetFilterConfig()returnconfig;publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)ServletContextcontext=getFilterConfig().getServletContext();longbef=System.currentTimeMillis();chain.doFilter(req,res);/nochainparameterneededherelo

5、ngaft=System.currentTimeMillis();context.log(Requestto+req.getRequestURI()+:+(aft-bef);在web.xml中配置logcom.mrk.LogFilterlogservletname部署注意事項(xiàng)1filter-mapping標(biāo)簽中servlet-name與url-pattern。Filter不僅可以通過url-pattern來指定攔截哪些url匹配的資源。還可以通過servlet-name來指定攔截哪個(gè)指定的servlet(專門為某個(gè)servlet服務(wù)了,servlet-name對(duì)應(yīng)Servlet的相關(guān)配置)部署

6、注意事項(xiàng)2filter-mapping標(biāo)簽中dispatcher。指定過濾器所攔截的資源被Servlet容器調(diào)用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認(rèn)REQUEST。用戶可以設(shè)置多個(gè)子元素用來指定Filter對(duì)資源的多種調(diào)用方式進(jìn)行攔截。REQUEST:當(dāng)用戶直接訪問頁面時(shí),Web容器將會(huì)調(diào)用過濾器。如果目標(biāo)資源是通過RequestDispatcher的include()或forward()方法訪問或ERROR情況時(shí),那么該過濾器就不會(huì)被調(diào)用。INCLUDE:如果目標(biāo)資源是通過RequestDispatcher的include()方法訪問時(shí),則過濾器

7、被調(diào)用。除此之外,不會(huì)被調(diào)用。FORWARD:如果目標(biāo)資源是通過RequestDispatcher的forward()方法訪問時(shí),則過濾器將被調(diào)用,除此之外,不會(huì)被調(diào)用。ERROR:在跳轉(zhuǎn)到error.jsp時(shí),若過濾器配置了ERROR的dispather那么則會(huì)攔截,否則不會(huì)攔截。Listenerl目前Servlet中提供了兩類6種事件的觀察者接口:4個(gè)EventListeners類型接口ServletContextAttributeListenerServletRequestAttributeListenerServletRequestListenerHttpSessionAttribut

8、eListener2個(gè)LifecycleListeners類型接口ServletContextListenerHttpSessionListener。用HttpSessionListener統(tǒng)計(jì)在線用戶數(shù)l思考:當(dāng)一個(gè)用戶登入一個(gè)WEB應(yīng)用時(shí),就開始一個(gè)會(huì)話;當(dāng)會(huì)話被銷毀,則表示用戶離開了WEB應(yīng)用。publicclassOnlineCounterListenerimplementsHttpSessionListenerpublicvoidsessionCreated(HttpSessionEventevent)HttpSessionsession=event.getSession();Ser

9、vletContextcontext=session.getServletContext();Integercount=(Integer)context.getAttribute(count);if(null=count)count=newInteger(1);elsecount=newInteger(count+1);context.setAttribute(count,count);session.setMaxInactiveInterval(60);System.out.println(Anewsessioniscreated.sessionidis+session.getId();pu

10、blicvoidsessionDestroyed(HttpSessionEventevent)HttpSessionsession=event.getSession();ServletContextcontext=session.getServletContext();Integercount=(Integer)context.getAttribute(count);if(null=count)return;elsecount=newInteger(count-1);context.setAttribute(count,count);/session.setMaxInactiveInterva

11、l(60);System.out.println(Anewsessionistobedestroyed.sessionidis+session.getId();Listener.jsp當(dāng)前在線人數(shù)為:Web.xmlcom.mrk.listener.OnlineCounterListener用HttpSessionBindingListeners統(tǒng)計(jì)在線用戶人數(shù)l單例類OnlineUsers:表示在線用戶名單lUser類實(shí)現(xiàn)了HttpSessionBindingListeners接口(不需要在web.xml中注冊(cè))publicclassOnlineUsersprivatestaticfinalO

12、nlineUsersonlineUsers=newOnlineUsers();privateListusers=newArrayList();publicstaticOnlineUsersgetInstance() returnonlineUsers;publicvoidadd(Stringname)users.add(name);publicvoidremove(Stringname)users.remove(name);publicListgetUsers() returnusers;publicintgetCount() returnusers.size();publicclassUse

13、rimplementsHttpSessionBindingListenerprivateOnlineUsersonlineUsers=OnlineUsers.getInstance();privateStringname=null;publicUser(Stringname) =name;publicvoidsetName(Stringname) =name;publicStringgetName() ;publicvoidvalueBound(HttpSessionBindingEventevent)onlineUsers.add(name);System.out.println(name+isboundwithasession);publicvoidvalueUnbound(HttpSessionBindingEventevent)onlineUsers.remove(name);System.out.println(name+isunboundwithasess

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論