- 相關(guān)推薦
Servlet四種過(guò)濾器工作方式
Servlet四種過(guò)濾器工作方式,從J2EE1.3開(kāi)始,Servlet2.3規范中加入了對過(guò)濾器的支持。過(guò)濾器能夠對目標資源的請求和響應進(jìn)行截取。過(guò)濾器的工作方式分為四種,下面讓我們分別來(lái)看看這四種過(guò)濾器的工作方式:
1、request過(guò)濾器
這種過(guò)濾器的工作方式比較簡(jiǎn)單,大家也經(jīng)常遇到,如下圖所示:以下是web.xml文件配置方式:
myFilter
xx.MyFilter
myFilter
目標資源一
下面我們更改一下web.xml文件的配置,如下方式:
myFilter
xx.MyFilter
myFilter
目標資源一
myFilter
目標資源二
也就是說(shuō)此過(guò)濾器對目標資源一和目標資源二都進(jìn)行過(guò)濾,然后當目標資源一被訪(fǎng)問(wèn)的時(shí)候我們將請求轉發(fā)給目標資源二,那么這個(gè)時(shí)候過(guò)濾器是怎么工作的呢?如下圖所示:我們可以看到,當我們訪(fǎng)問(wèn)目標資源一時(shí)過(guò)濾器截取了請求,然后再轉發(fā)給目標資源一,然后再轉發(fā)給目標資源二,從圖中我們可以看到過(guò)濾器沒(méi)有截取轉發(fā)到目標資源二的請求,但是我們已經(jīng)在web.xml文件中配置了該過(guò)濾器對目標資源二的過(guò)濾,為什么又沒(méi)有起到過(guò)濾作用呢?
答案就在于,目標資源一是客戶(hù)端直接訪(fǎng)問(wèn),而目標資源二是被轉發(fā)過(guò)來(lái)的,這時(shí)過(guò)濾器就不能過(guò)濾目標資源二。如果你直接訪(fǎng)問(wèn)目標資源二,你會(huì )發(fā)現該過(guò)濾器起到了作用?
我們上面的web.xml文件配置與以下方式等價(jià):
myFilter
myFilter
xx.MyFilter
myFilter
目標資源一
REQUEST
myFilter
目標資源二
REQUEST
這種方式的配置,說(shuō)明只有直接訪(fǎng)問(wèn)該目標資源時(shí)該過(guò)濾器才會(huì )起作用,對轉發(fā)到該目標資源的請求將忽略不處理。
那如果我想對轉發(fā)到目標資源二的請求進(jìn)行過(guò)濾,那怎么辦呢?答案見(jiàn),下一種過(guò)濾器,forward過(guò)濾器。
2、forward過(guò)濾器
我們將web.xml文件的配置修改如下:
myFilter
myFilter
xx.MyFilter
myFilter
目標資源一
REQUEST
myFilter
目標資源二
FORWARD
工作方式如下圖所示:
我們看對目標資源二過(guò)濾的配置方式,這時(shí)過(guò)濾方式為forward,也就是說(shuō)對轉發(fā)到目標資源二的請求過(guò)濾,如果直接訪(fǎng)問(wèn)目標資源二,過(guò)濾器將不起作用。
3、include過(guò)濾器
理解了forward過(guò)濾器之后,include過(guò)濾器就不難理解了。以下方式:
myFilter
目標資源二
INCLUDE
此表示對包含了目標資源二的請求過(guò)濾,如果直接訪(fǎng)問(wèn)目標資源二,則此過(guò)濾器將不起作用。
include包含以下語(yǔ)句:
在JSP頁(yè)面中的動(dòng)作:指令包含,這時(shí)此過(guò)濾器不工作。
4、error過(guò)濾器
當我們訪(fǎng)問(wèn)一個(gè)web目標資源時(shí),如果服務(wù)器沒(méi)有找到該目標資源,那么服務(wù)器就會(huì )給出一個(gè)404錯誤代碼。如果我們給404錯誤代碼定義一個(gè)頁(yè)面,那么當404錯誤發(fā)生時(shí)就會(huì )調用該頁(yè)面,請看以下web.xml文件的配置:
myFilter
/error.jsp
ERROR
404
/error.jsp
當我們訪(fǎng)問(wèn)一個(gè)不存在的文件時(shí),就會(huì )訪(fǎng)問(wèn)error.jsp,但是配置了過(guò)濾器對錯誤頁(yè)面進(jìn)行過(guò)濾,所以過(guò)濾器先接受到請求,然后再轉發(fā)給error.jsp.
如果我們訪(fǎng)問(wèn)一個(gè)已經(jīng)存在的頁(yè)面,會(huì )不會(huì )調用error.jsp呢?如果這個(gè)頁(yè)面中有response.sendError(404,“出錯了!”);那么該錯誤頁(yè)面仍然會(huì )被調用,過(guò)濾器也會(huì )工作。
【Servlet四種過(guò)濾器工作方式】相關(guān)文章:
未來(lái)工作方式的趨勢10-24
OA系統改變工作方式01-23
SUN認證考試知識點(diǎn):java servlet生命周期09-25
項目監理部資料管理工作方式技巧07-01
專(zhuān)升本的四種途徑07-27
中餐的四種禮儀08-25
音的四種性質(zhì)10-13