版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
提出問題應(yīng)用中常有這樣的功能:1.有好些頁(yè)面只有是登陸的客戶才能查看顯示2.Servlet在獲取請(qǐng)求參數(shù)時(shí),為了防止中文亂碼,都需要設(shè)置請(qǐng)求編碼字符集如果用現(xiàn)有的知識(shí)去做的話,需要在每個(gè)jsp或Servlet中做同樣的操作,如何簡(jiǎn)化這種重復(fù)性的操作呢?過濾器:Filter現(xiàn)實(shí)案例一輛地鐵車有好些門,
你可以從任意一個(gè)進(jìn)入坐地鐵,
但需要你花2元錢才可以坐上,那現(xiàn)在
怎么解決這個(gè)問題呢?方法1:在地鐵的每個(gè)門都設(shè)置一個(gè)關(guān)卡刷卡方法2:
在站臺(tái)外設(shè)置一個(gè)
的關(guān)卡來刷卡,如果有錢才可以進(jìn)行坐車,
要沒有錢不能讓你進(jìn)站方法2使用的就是過濾器技術(shù),這樣能極大的提高代碼的復(fù)用Filter(過濾器)簡(jiǎn)介Filter的基本功能是對(duì)
Servlet容器調(diào)用
Servlet(JSP)的過程進(jìn)行
,從而在
Servlet處理請(qǐng)求前和Servlet響應(yīng)請(qǐng)求后實(shí)現(xiàn)一些特殊的功能。在
Servlet
API
中定義了三個(gè)接口類來開供開發(fā) 編寫Filter
程序:Filter,FilterChain,FilterConfigFilter
程序是一個(gè)實(shí)現(xiàn)了Filter
接口的Java
類,與Servlet
程序相似,它由Servlet容器進(jìn)行調(diào)用和執(zhí)行Filter
程序需要在
web.xml
文件中進(jìn)行 和設(shè)置它所能的資源:Filter
程序可以
Jsp,
Servlet,
靜態(tài)
文件和靜態(tài)html文件Filter
的過濾過程Filter
的過濾過程Filter
的基本工作原理當(dāng)在
web.xml
中
了一個(gè)
Filter
來對(duì)某個(gè)
Servlet
程序進(jìn)行
處理時(shí),這個(gè)
Filter
就成了
Tomcat與該
Servlet
程序的通信線
的一道關(guān)卡,該
Filter
可以對(duì)
Servlet
容器發(fā)送給
Servlet程序的請(qǐng)求和
Servlet程序回送給
Servlet容器的響應(yīng)進(jìn)行
,可以決定是否將請(qǐng)求繼續(xù)傳遞給
Servlet程序,以及對(duì)請(qǐng)求和相應(yīng)信息是否進(jìn)行修改在一個(gè)
web
應(yīng)用程序中可以
多個(gè)
Filter
程序,每個(gè)
Filter
程序都可以對(duì)一個(gè)或一組
Servlet
程序進(jìn)行
。若有多個(gè)
Filter
程序?qū)δ硞€(gè)
Servlet
程序的
過程進(jìn)行
,當(dāng)針對(duì)該
Servlet
的
請(qǐng)求到達(dá)時(shí),web
容器將把這多個(gè)
Filter
程序組一個(gè)
Filter
鏈(過濾器鏈)。Filter
鏈中各個(gè)
Filter
的
順序與它們?cè)趹?yīng)用程序的
web.xml
中
的順序一致Filter
接口init(FilterConfig
filterConfig)throws
ServletException:在
web
應(yīng)用程序啟動(dòng)時(shí),web
服務(wù)器將根據(jù)
web.xml
文件中的配置信息來創(chuàng)建每個(gè)
的
Filter
實(shí)例對(duì)象,并將其保存在服務(wù)器的內(nèi)存中。Web容器創(chuàng)建
Filter
對(duì)象實(shí)例后,將立即調(diào)用該
Filter
對(duì)象的
init
方法。Init方法在
Filter
生命周期中僅執(zhí)行一次,web
容器在調(diào)用
init
方法時(shí),會(huì)傳遞一個(gè)包含
Filter
的配置和運(yùn)行環(huán)境的
FilterConfig
對(duì)象
(FilterConfig的用法和ServletConfig類似)。利用FilterConfig對(duì)象可以得到ServletContext對(duì)象,以及部署描述符中配置的過濾器的初始化參數(shù)。在這個(gè)方法中,可以拋出ServletException異常,通知容器該過濾器不能正常工作。destroy():在Web容器卸載
Filter對(duì)象之前被調(diào)用。該方法在Filter的生命周期中僅執(zhí)行一次。在這個(gè)方法中,可以
過濾器使用的資源與開發(fā)Servlet不同的是,F(xiàn)ilter接口并沒有相應(yīng)的實(shí)現(xiàn)類可供繼承,要開發(fā)過濾器,只能直接實(shí)現(xiàn)Filter接口。Filter
接口doFilter(ServletRequest
request,ServletResponse
response,FilterChain
chain)throws
java.io.IOException,ServletException:doFilter()方法類似于Servlet接口的service()方法。當(dāng)客戶端請(qǐng)求目標(biāo)資源的時(shí)候,容器就會(huì)調(diào)用與這個(gè)目標(biāo)資源相關(guān)聯(lián)的過濾器的
doFilter()方法。其中參數(shù)
request,
response
為
web
容器或
Filter鏈的上一個(gè)
Filter
傳遞過來的請(qǐng)求和相應(yīng)對(duì)象;參數(shù)chain
為代表當(dāng)前
Filter鏈的對(duì)象,在特定的操作完成后,可以在當(dāng)前
Filter
對(duì)象的
doFilter
方法
需要調(diào)用
FilterChain
對(duì)象的
chain.doFilter(request,response)方法才能把請(qǐng)求交付給
Filter鏈中的下一個(gè)
Filter
或者目標(biāo)
Servlet程序去處理,也可以直接向客戶端返回響應(yīng)信息,或者利用RequestDispatcher的forward()和
include()方法,以及HttpServletResponse的sendRedirect()方法將請(qǐng)求轉(zhuǎn)向到其他資源。這個(gè)方法的請(qǐng)求和響應(yīng)參數(shù)的類型是ServletRequest和ServletResponse,也就是
濾器的使用并不依賴于具體的協(xié)議。FilterChain接口FilterChain接口:代表當(dāng)前Filter鏈的對(duì)象。由容器實(shí)現(xiàn),容器將其實(shí)例作為參數(shù)傳入過濾器對(duì)象的doFilter()方法中。過濾器對(duì)象使用FilterChain對(duì)象調(diào)用過濾器鏈中的下一個(gè)過濾器,如果該過濾器是鏈中最后一個(gè)過濾器,那么將調(diào)用目標(biāo)資源。doFilter(ServletRequest
request,ServletResponseresponse)throwsjava.io.IOException:調(diào)用該方法將使過濾器鏈中的下一個(gè)過濾器被調(diào)用。如果是最后一個(gè)過濾器,會(huì)調(diào)用目標(biāo)資源。Filter
的過濾過程瀏覽器/day07/test.jspTomcatTest.jspTest1Filter1doFilter(filterChain){//do
domething(1)filterChain.doFilter()//do
something}在請(qǐng)求到資源前做些事在資源處理完請(qǐng)求返回后做些事Test2Filter2doFilter(filterChain){//do
domething(2)filterChain.doFilter()//do
something}Filter
的過濾過程瀏覽器/day07/test.jspTest.jspBefore()
2After()
2UserNamePasswordFilterConfig
接口javax.servlet.FilterConfig接口:該接口類似于ServletConfig接口,由容器實(shí)現(xiàn)。Servlet規(guī)范將代表ServletContext對(duì)象和
Filter
的配置參數(shù)信息都封裝在該對(duì)象中。Servlet容器將其作為參數(shù)傳入過濾器對(duì)象的init()方法中。String
getFilterName():得到描述符中指定的過濾器的名字。String
getInitParameter(String
name):返回在部署描述中指定的名字為name的初始化參數(shù)的值。如果不存在返回null.
EnumerationgetInitParameterNames():返回過濾器的所有初始化參數(shù)的名字的枚舉集合。publicServletContextgetServletContext():返回Servlet上下文對(duì)象的
。過濾器的部署在實(shí)現(xiàn)一個(gè)過濾器后,需要在
web.xml中進(jìn)行和設(shè)置它所能 的資源。這可以通過<filter>和<filter-map
>元素來完成的。<filter>
元素(Filter)一個(gè)過濾器。<filter>元素用于在Web應(yīng)用程序中在<filter>元素內(nèi)<filter-name>用于為過濾器指定一個(gè)名字,該元素的內(nèi)容不能為空。<filter-class>元素用于指定過濾器的完整的限定類名。<init-param>元素用于為過濾器指定初始化參數(shù),它的子元素<param-name>指定參數(shù)的名字,<param-value>指定參數(shù)的值。在過濾器中,可以使用FilterConfig接口對(duì)象來 初始化參數(shù)。<filter>
元素(
Filter)<filter><filter-name>testFitler</filter-name><filter-class>
.test.TestFiter</filter-class><init-param><param-name>word_file</param-name><param-value>/WEB-INF/word.txt</param-value></init-param></filter>Servlet容器對(duì)部署描述符中的每一個(gè)過濾器,只創(chuàng)建一個(gè)實(shí)例。與Servlet類似,容器將在同一個(gè)過濾器實(shí)例上運(yùn)行多個(gè)線程來同時(shí)為多個(gè)請(qǐng)求服務(wù),因此,開發(fā)過濾器時(shí),也要注意線程安全的問題。Filter>元素用于設(shè)置一個(gè)
Filter所負(fù)責(zé) 的資的資源可通過兩種方式來指定:Servlet<filter-map源。一個(gè)Filter名稱和資源的請(qǐng)求路徑(url樣式)–
<filter-name>子元素用于設(shè)置filter的
名稱。該值必須是在<filter>元素中
過的過濾器的名字<url-pattern>設(shè)置
filter所<servlet-name>指定過濾器所<dispatcher>指定過濾器所的請(qǐng)求路徑(過濾器關(guān)聯(lián)的URL樣式)的Servlet名稱。的資源被
Servlet
容器調(diào)用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認(rèn)REQUEST.可以設(shè)置多個(gè)<dispatcher>子元素用來指定
Filter
對(duì)資源的多種調(diào)用方式進(jìn)行Filter<dispatcher>子元素可以設(shè)置的值及其意義:REQUEST:當(dāng)用戶直接 頁(yè)面時(shí),Web容器將會(huì)調(diào)用過濾器。如果目標(biāo)資源是通過RequestDispatcher的include()或forward()方法 時(shí),那么該過濾器就不會(huì)被調(diào)用。INCLUDE:如果目標(biāo)資源是通過RequestDispatcher的include()方法
時(shí),那么該過濾器將被調(diào)用。除此之外,該過濾器不會(huì)被調(diào)用。FORWARD:如果目標(biāo)資源是通過RequestDispatcher的forward()方法 時(shí),那么該過濾器將被調(diào)用,除此之外,該過濾器不會(huì)被調(diào)用。ERROR:如果目標(biāo)資源是通過 式異常處理機(jī)制調(diào)用時(shí),那么該過濾器將被調(diào)用。除此之外,過濾器不會(huì)被調(diào)用。Filter<filter-map
><filter-name>testFilter</filter-name><url-pattern>/index.jsp</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-map
><filter-map
><filter-name>testFilter</filter-name><url-pattern>/test.jsp</url-pattern></filter-map
>Filter在同一個(gè)web.xml
文件中可以為同一個(gè)Filter
設(shè)置多個(gè)。若一個(gè)
Filter
鏈中多次出現(xiàn)了同一個(gè)
Filter
程序,這個(gè)
Filter
程序的 處理過程將被多次執(zhí)行o.jspl.jspLogin.jsplogin.jspUserNameFilterPasswordFiltero.jsplogin.jsp
請(qǐng)求提交到
o.jsp。該頁(yè)面中有兩個(gè)
text,分別為username
和
passwordUserNameFilter、PasswordFilter login.jsp
的請(qǐng)求頁(yè)面,即
o.jspUserNameFilter:若username不等于Tom,則將請(qǐng)求轉(zhuǎn)發(fā)到
login.jsp,并提示用戶:“用戶名錯(cuò)誤”,若等于Tom,則把請(qǐng)求轉(zhuǎn)給下一個(gè)FilterPasswordFilter:若passord不等于1234,則將請(qǐng)求轉(zhuǎn)發(fā)到login.jsp,并提示用戶:“錯(cuò)誤”,若等于1234,則把請(qǐng)求轉(zhuǎn)給目標(biāo)頁(yè)面練
:使用Filter實(shí)現(xiàn)用戶名和
的過濾IEweb_14/app1/o.jspTomcato.jspNameFilterPasswordFilterpath
:
web_14/app1/
o.jsp練習(xí)2:禁用緩存使瀏覽器不緩存頁(yè)面的過濾器:瀏覽器緩存當(dāng)前頁(yè)面,它們有3
個(gè)HTTP
響應(yīng)頭字段都可以在Servlet
中的示例代碼如下:resp.setDateHeader("Expires",-1);resp.setHeader("Cache-Control","no-cache");resp.setHeader("Pragma","no-cache");并不是所有的瀏覽器都能完全支持上面的三個(gè)響應(yīng)頭,因此最好是同時(shí)使用上面的三個(gè)響應(yīng)頭練習(xí)3:解決中文亂碼字符編碼的過濾器–通過配置參數(shù)encoding指明使用何種字符編碼,以處理Form請(qǐng)求參數(shù)的中文問題練習(xí)4:檢測(cè)用戶是否登陸情景:系統(tǒng)中的某些頁(yè)面只有在正常登陸后才可以使用,用戶請(qǐng)求這些頁(yè)面時(shí)要檢查
session
中有無該用戶信息,但在所有必要的頁(yè)面加上session的判斷相當(dāng)麻煩的事情解決方案:編寫一個(gè)用于檢測(cè)用戶是否登陸的過濾器,如果用戶未登錄,則重定向到指的登錄頁(yè)面要求:需檢查的在
Session
中保存的關(guān)鍵字;如果用戶未登錄,需重定向到指定的頁(yè)面(URL不包括
ContextPath);不做檢查的URL列表(以分號(hào)分開,并且
URL
中不包括
ContextPath)都要采取可配置的方式練習(xí)6:為過濾不雅文字和HTML特殊字符開 壇模塊時(shí)要解決以下兩個(gè)問題:1.
用戶回復(fù)或發(fā)帖時(shí)可能會(huì)輸入
HTML
代碼(例如:<,
>等),這可能會(huì)破壞
的正常顯示,也可能會(huì)帶來安全隱患。2.某些用戶在回復(fù)時(shí)可能會(huì)輸入不雅子句,這些子句會(huì)給論壇帶來不好的影響3.實(shí)現(xiàn)對(duì)不雅文字的可配置要求:不雅文字及其替換內(nèi)容實(shí)現(xiàn)可配置。***裝飾
HttpServletRequest
對(duì)象需求:在HttpServletRequest
對(duì)象到達(dá)Servlet
之前把用戶輸入的多余空格都去掉情景:因?yàn)镠ttpServletRequest
對(duì)象里的請(qǐng)求參數(shù)都實(shí)際包含在java.util.Map
對(duì)象里,而Map是不允許修改的,所以包含在HttpServletRequest
對(duì)象里的請(qǐng)求參數(shù)不能被修改解決方案:采取Decorator(裝飾器)模式Decorator
模式因?yàn)槔^承的關(guān)系,當(dāng)需要改變某個(gè)對(duì)象的行為時(shí),只須擴(kuò)
展這個(gè)對(duì)象所屬的類并重寫其有關(guān)的方法就可以達(dá)到目的。但是,當(dāng)想要改變其行為的對(duì)象是由應(yīng)用程序里的另一個(gè)
子系統(tǒng)(例如:一個(gè)對(duì)象工廠或是一個(gè)Servlet
容器)負(fù)責(zé)構(gòu)造,繼承機(jī)制將 為力Decorator
模式----情景已知:Messager
類的定義(可以從它派生處一個(gè)之類);Messager
對(duì)象總是來自一個(gè)對(duì)象工廠(MessagerFactory),該工廠可以對(duì)它創(chuàng)建的每一個(gè)Messager
對(duì)象進(jìn)行初始化----通過調(diào)用getMessage()方法而獲得的message
屬性也不例外(即不能對(duì)Messager
對(duì)象進(jìn)行初始化)假設(shè):需要使用Messager
類的getMessage()方法。有一個(gè)Util的使用工具類,該類中有如下方法:public
static
void
broadcast(Message
messager){System.out.println(messager.getMessage());}Decorator
模式----需求,方案需求:讓broadcast
方法打印的字母都是大寫字母方案:從Messager
類派生一個(gè)子類,把子類對(duì)象傳遞給broadcast
方法。因?yàn)橹挥袑?duì)象工廠知道如何初始化Messager
對(duì)象,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年銷售經(jīng)理區(qū)域市場(chǎng)拓展聘用合同模板2篇
- 2025年項(xiàng)目工程中介協(xié)議書模板(含設(shè)計(jì)、施工、驗(yàn)收)3篇
- 2025年私人房產(chǎn)買賣合同文本與合同解除條件3篇
- 民政局2025版離婚協(xié)議書婚姻糾紛調(diào)解服務(wù)協(xié)議2篇
- 二零二五版美容院美容院連鎖加盟管理合同4篇
- 墻面裝飾板施工方案
- 窮人續(xù)寫200字6篇
- 2024年中級(jí)經(jīng)濟(jì)師考試題庫(kù)(典型題)
- 2025年消防系統(tǒng)智能化改造與安全評(píng)估合同協(xié)議3篇
- 2024年園區(qū)綠化管理制度
- 二零二五年度無人駕駛車輛測(cè)試合同免責(zé)協(xié)議書
- 2025年湖北華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員52名歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高三日語一輪復(fù)習(xí)助詞「と」的用法課件
- 毛渣采購(gòu)合同范例
- 2023中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-注射相關(guān)感染預(yù)防與控制
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 2024年廣東高考政治真題考點(diǎn)分布匯 總- 高考政治一輪復(fù)習(xí)
- 燃?xì)夤艿滥甓葯z驗(yàn)報(bào)告
- GB/T 44052-2024液壓傳動(dòng)過濾器性能特性的標(biāo)識(shí)
- FZ/T 81013-2016寵物狗服裝
- JB∕T 14089-2020 袋式除塵器 濾袋運(yùn)行維護(hù)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論