1、request過濾器
這種過濾器的工作方式比較簡(jiǎn)單,大家也經(jīng)常遇到,如下圖所示:以下是web.xml文件配置方式:
<filter >
<filter-name >myFilter</filter-name >
<filter-class >xx.MyFilter</filter-class >
<filter >
<filter-mapping >
<filter-name >myFilter</filter-name >
<servlet-name >目標(biāo)資源一</servlet-name >
</filter-mapping >
下面我們更改一下web.xml文件的配置,如下方式:
<filter >
<filter-name >myFilter</filter-name >
<filter-class >xx.MyFilter</filter-class >
</filter >
<filter-mapping >
<filter-name >myFilter</filter-name >
<servlet-name >目標(biāo)資源一</servlet-name >
</filter-mapping >
<filter-mapping >
<filter-name >myFilter</filter-name >
<servlet-name >目標(biāo)資源二</servlet-name >
</filter-mapping >
也就是說此過濾器對(duì)目標(biāo)資源一和目標(biāo)資源二都進(jìn)行過濾,然后當(dāng)目標(biāo)資源一被訪問的時(shí)候我們將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)資源二,那么這個(gè)時(shí)候過濾器是怎么工作的呢?如下圖所示:我們可以看到,當(dāng)我們?cè)L問目標(biāo)資源一時(shí)過濾器截取了請(qǐng)求,然后再轉(zhuǎn)發(fā)給目標(biāo)資源一,然后再轉(zhuǎn)發(fā)給目標(biāo)資源二,從圖中我們可以看到過濾器沒有截取轉(zhuǎn)發(fā)到目標(biāo)資源二的請(qǐng)求,但是我們已經(jīng)在web.xml文件中配置了該過濾器對(duì)目標(biāo)資源二的過濾,為什么又沒有起到過濾作用呢?
答案就在于,目標(biāo)資源一是客戶端直接訪問,而目標(biāo)資源二是被轉(zhuǎn)發(fā)過來的,這時(shí)過濾器就不能過濾目標(biāo)資源二。如果你直接訪問目標(biāo)資源二,你會(huì)發(fā)現(xiàn)該過濾器起到了作用?
我們上面的web.xml文件配置與以下方式等價(jià):
<filter >myFilter</filter >
<filter-name >myFilter</filter-name >
<filter-class >xx.MyFilter</filte-class >
</filter >
<filter-mapping >
<filter-name >myFilter</filter-name >
<servlet-name >目標(biāo)資源一</servlet-name >
<dispatcher >REQUEST</dispatcher >
</filter-mapping >
<filter-mapping >
<filter-name >myFilter</filter-name >
<servlet-name >目標(biāo)資源二</servlet-name >
<dispatcher >REQUEST</dispatcher >
</filter-mapping >
這種方式的配置,說明只有直接訪問該目標(biāo)資源時(shí)該過濾器才會(huì)起作用,對(duì)轉(zhuǎn)發(fā)到該目標(biāo)資源的請(qǐng)求將忽略不處理。
那如果我想對(duì)轉(zhuǎn)發(fā)到目標(biāo)資源二的請(qǐng)求進(jìn)行過濾,那怎么辦呢?答案見,下一種過濾器,forward過濾器。