第六章過濾器與_第1頁
第六章過濾器與_第2頁
第六章過濾器與_第3頁
第六章過濾器與_第4頁
第六章過濾器與_第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)聽器回顧了解Servlet的多線程機(jī)制.多線程單實(shí)例如何開發(fā)線程安全的Servlet.使用局部變量代替實(shí)例變量Servlet3.0的異步處理機(jī)制.異步處理允許Servlet

重新發(fā)起一條新線程去調(diào)用耗時(shí)業(yè)務(wù)方法,這樣就可以避免等待目標(biāo)過濾器及過濾器鏈監(jiān)聽器概念與應(yīng)用Servlet3.0的過濾器與監(jiān)聽器的使用過濾器概念:從J2EE1.3開始,Servlet2.3規(guī)范中加入了對(duì)Filter的支持。Filter就稱之為過濾器,它是Servlet技術(shù)中最激動(dòng)人心的技術(shù),WEB開發(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í)功能,ServletAPI提供了一個(gè)Filter接口,實(shí)現(xiàn)這個(gè)接口的Servlet就是一個(gè)過慮器過濾器及過濾器鏈過濾器案例:第一步:編寫過濾器類(實(shí)現(xiàn)Filter

接口,并重寫方法)第二步:修改web.xml第三步:編譯和部署過濾器過濾器及過濾器鏈第一步:編寫過濾器類public

class

Utf8Filter

implements

Filter{public

void

doFilter(ServletRequest

request,

ServletResponseresponse,FilterChain

chain)

throws

IOException,

ServletException

{request.setCharacterEncoding("utf-8");chain.doFilter(request,

response);}過濾器及過濾器鏈Filter的方法介紹1、Filter的init(FilterConfig

filterConfig)方法:與Servlet的Init方法一樣,在創(chuàng)建時(shí)被調(diào)用,之后被保存在內(nèi)存中直至服務(wù)器重啟或關(guān)閉時(shí)Filter實(shí)例才會(huì)被銷毀。與Servlet不同之處在于,服務(wù)器啟動(dòng)時(shí)就會(huì)實(shí)例化所有Filter,而Servlet中有當(dāng)用戶第一次訪問它時(shí)才會(huì)被實(shí)例化。我們通過在web.xml使用<init-param>對(duì)Filter配置的初始化參數(shù),可以通過FilterConfig來獲得。FilterConfig的方法有:String

getFilterName():得到filter的名稱。String

getInitParameter(String

name):返回在部署描述中指定名稱的初始化參數(shù)的值。如果不存在返回null.Enumeration

getInitParameterNames():返回過濾器的所有初始化參數(shù)的名字的枚舉集合。public

ServletContext

getServletContext():返回Servlet上下文對(duì)象的引用。過濾器及過濾器鏈Filter的方法介紹2.Filter的destroy()方法:當(dāng)服務(wù)器重啟或關(guān)閉時(shí),在銷毀Filter之前調(diào)用此方法。過濾器及過濾器鏈第二步:修改web.xml<filter><filter-name>utf8</filter-name><filter-class>filter.Utf8Filter</filter-class></filter><filter-mapping><filter-name>utf8</filter-name><url-pattern>/*</url-pattern></filter-mapping>過濾器及過濾器鏈第三步:編譯和部署過濾器訪問servlet

過濾器已經(jīng)能夠?qū)λ姓?qǐng)求,

進(jìn)行字符集的設(shè)定解決中文亂碼問題。過濾器及過濾器鏈思考?在實(shí)際web開發(fā)中,需要解決中文亂碼,然后過濾特殊字符,怎么做過濾器?過濾器鏈過濾器及過濾器鏈過濾器鏈?zhǔn)纠哼^濾器及過濾器鏈<filter><filter-name>utf8</filter-name><filter-class>filter.Utf8Filter</filter-class></filter><filter-mapping><filter-name>utf8</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>feifa</filter-name><filter-class>filter.FeifaFilter</filter-class></filter><filter-mapping><filter-name>feifa</filter-name><url-pattern>/*</url-pattern></filter-mapping>結(jié)論用戶的訪問需要根據(jù)web.xml過濾器的順序經(jīng)過過濾器1過濾然后再經(jīng)過過濾器2過濾。doFilter中有一個(gè)FilterChain參數(shù),這個(gè)參數(shù)是服務(wù)器根據(jù)web.xml中配置的過濾器,按照先后順序生成的過濾器鏈。當(dāng)我們?cè)赿oFilter方法中調(diào)用

chain.doFilter(request,

response);方法時(shí),服務(wù)器會(huì)查找過濾鏈中是否還有過濾器,如果有繼續(xù)調(diào)用下一個(gè)過濾器,如果沒有將調(diào)用相應(yīng)的Servlet處理用戶請(qǐng)求。過濾器及過濾器鏈?zhǔn)裁词潜O(jiān)聽器Servlet監(jiān)聽器用于監(jiān)聽一些重要事件的發(fā)生,監(jiān)聽器對(duì)象可以在事情發(fā)生前、發(fā)生后可以做一些必要的處理。下面將介紹幾種常用的監(jiān)聽器監(jiān)聽器概念與應(yīng)用開發(fā)監(jiān)聽器的步驟1、實(shí)現(xiàn)Servlet的監(jiān)聽器接口public

class

SessionListener

implements

HttpSessionListener

{public

void

sessionCreated(HttpSessionEvent

arg0)

{

}public

void

sessionDestroyed(HttpSessionEvent

event)HttpSession

session

=

event.getSession();User

user

=

(UcmSession)

session.getAttribute("currUser");if

(user

!=

null)

{//TODO

something}}監(jiān)聽器概念與應(yīng)用開發(fā)監(jiān)聽器的步驟2、web.xml配置<listener><listener-class>com.lisenter.MySessionListener</listener-class></listener>監(jiān)聽器概念與應(yīng)用監(jiān)聽器概念與應(yīng)用事件類型描述監(jiān)聽接口Servlet

Context

事件Lifecycle(生命周期)servletcontext剛剛創(chuàng)建并且可用,在第一次請(qǐng)求時(shí)提供服務(wù),或者servletcontext

將要被關(guān)閉時(shí)觸發(fā).javax.servlet.ServletContextListenerChanges

toattributes(屬性改變)servletservletcontext中一個(gè)屬性添加移除或替換時(shí)觸發(fā).javax.servlet.ServletContextAttributeListenerHTTP

Session

Events(會(huì)話事件)Lifecycle(生命周期)一個(gè)會(huì)話建立,失效,或超時(shí)的時(shí)候觸發(fā).javax.servlet.http.HttpSessionListenerChanges

toattributes(屬性改變)HttpSession中一個(gè)屬性添加移除或替換時(shí)觸發(fā).javax.servlet.httpHttpSessionAttributeListenerServlet

Request

Events(請(qǐng)求事件)Lifecycle(生命周期)一個(gè)請(qǐng)求被網(wǎng)絡(luò)組件進(jìn)行處理時(shí)觸發(fā).javax.servlet.ServletRequestListenerChanges

toattributes(屬性改變)HttpRequest中一個(gè)屬性添加移除或替換時(shí)觸發(fā)javax.servlet.ServletRequestAttributeListenerServletContextListener:用于監(jiān)聽WEB應(yīng)用啟動(dòng)和銷毀的事件,監(jiān)聽器類需要實(shí)現(xiàn)javax.servlet.ServletContextListener接口。ServletContextAttributeListener:用于監(jiān)聽WEB應(yīng)用屬性

改變的事件,包括:增加屬性、刪除屬性、修改屬性,監(jiān)聽器類需要實(shí)現(xiàn)javax.servlet.ServletContextAttributeListener接口。HttpSessionListener:用于監(jiān)聽Session對(duì)象的創(chuàng)建和銷毀,監(jiān)聽器類需要實(shí)現(xiàn)javax.servlet.http.HttpSessionListener接口

或者javax.servlet.http.HttpSessionActivationListener接口,或

者兩個(gè)都實(shí)現(xiàn)。監(jiān)聽器概念與應(yīng)用HttpSessionActivationListener:用于監(jiān)聽Session對(duì)象的鈍化/活化事件,監(jiān)聽器類需要實(shí)現(xiàn)

javax.servlet.http.HttpSessionListener接口或者

javax.servlet.http.HttpSessionActivationListener接口,或者兩個(gè)都實(shí)現(xiàn)。HttpSessionAttributeListener:用于監(jiān)聽Session對(duì)象屬性的改變事件,監(jiān)聽器類需要實(shí)現(xiàn)

javax.servlet.http.HttpSessionAttributeListener接口。監(jiān)聽器概念與應(yīng)用HttpSessionActivationListener:用于監(jiān)聽Session對(duì)象的鈍化/活化事件,監(jiān)聽器類需要實(shí)現(xiàn)

javax.servlet.http.HttpSessionListener接口或者

javax.servlet.http.HttpSessionActivationListener接口,或者兩個(gè)都實(shí)現(xiàn)。HttpSessionAttributeListener:用于監(jiān)聽Session對(duì)象屬性的改變事件,監(jiān)聽器類需要實(shí)現(xiàn)

javax.servlet.http.HttpSess

溫馨提示

  • 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)論