2.4版本的servlet規(guī)范在部屬描述符中新增加了一個(gè)<dispatcher>元素,這個(gè)元素有四個(gè)可能的值:即REQUEST,FORWARD,INCLUDE和ERROR,可以在一個(gè)<filter-mapping>元素中加入任意數(shù)目的<dispatcher>,使得filter將會(huì)作用于直接從客戶端過(guò)來(lái)的request,通過(guò)forward過(guò)來(lái)的request,通過(guò)include過(guò)來(lái)的request和通過(guò)<error-page>過(guò)來(lái)的request。如果沒(méi)有指定任何< ? dispatcher ? >元素,默認(rèn)值是REQUEST??梢酝ㄟ^(guò)下面幾個(gè)例子來(lái)輔助理解。 ?
? 例1: ?
? <filter-mapping> ?
? <filter-name>Logging ? Filter</filter-name> ?
? <url-pattern>/products/*</url-pattern> ?
? </filter-mapping> ?
? 這種情況下,過(guò)濾器將會(huì)作用于直接從客戶端發(fā)過(guò)來(lái)的以/products/…開(kāi)始的請(qǐng)求。因?yàn)檫@里沒(méi)有制定任何的< ? dispatcher ? >元素,默認(rèn)值是REQUEST。 ?
? ?
? 例2: ?
? <filter-mapping> ?
? ? ? ? ? ? ? ? ? <filter-name>Logging ? Filter</filter-name> ?
? ? ? ? ? ? ? ? ? <servlet-name>ProductServlet</servlet-name> ?
? ? ? ? ? ? ? ? ? <dispatcher>INCLUDE</dispatcher> ?
? </filter-mapping> ?
? 這種情況下,如果請(qǐng)求是通過(guò)request ? dispatcher的include方法傳遞過(guò)來(lái)的對(duì)ProductServlet的請(qǐng)求,則要經(jīng)過(guò)這個(gè)過(guò)濾器的過(guò)濾。其它的諸如從客戶端直接過(guò)來(lái)的對(duì)ProductServlet的請(qǐng)求等都不需要經(jīng)過(guò)這個(gè)過(guò)濾器。 ?
? 指定filter的匹配方式有兩種方法:直接指定url-pattern和指定servlet,后者相當(dāng)于把指定的servlet對(duì)應(yīng)的url-pattern作為filter的匹配模式 ?
? filter的路徑匹配和servlet是一樣的,都遵循servlet規(guī)范中《SRV.11.2 ? Specification ? of ? Mappings》一節(jié)的說(shuō)明 ?
? ?
? 例3: ?
? <filter-mapping> ?
? ? ? ? ? ? ? ? ? <filter-name>Logging ? Filter</filter-name> ?
? ? ? ? ? ? ? ? ? <url-pattern>/products/*</url-pattern> ?
? ? ? ? ? ? ? ? ? <dispatcher>FORWARD</dispatcher> ?
? ? ? ? ? ? ? ? ? <dispatcher>REQUEST</dispatcher> ?
? </filter-mapping> ?
? 在這種情況下,如果請(qǐng)求是以/products/…開(kāi)頭的,并且是通過(guò)request ? dispatcher的forward方法傳遞過(guò)來(lái)或者直接從客戶端傳遞過(guò)來(lái)的,則必須經(jīng)過(guò)這個(gè)過(guò)濾器。??
posted on 2006-12-22 08:46
保爾任 閱讀(829)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
J2SE