日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

filter中的dispatcher標(biāo)簽解析

 沙門空海 2018-01-17

一、forward和include

RequestDispatcher提供兩個(gè)方法forward和include進(jìn)行資源跳轉(zhuǎn)。
不同的是,如果使用forward跳轉(zhuǎn)則其后面的response輸出則不會(huì)執(zhí)行,而用include來跳轉(zhuǎn),則include的servlet執(zhí)行完后,再返回到原來的servlet執(zhí)行response的輸出(如果有)。
實(shí)例:
servlet A

RequestDispatcher disp = request.getRequestDispatcher("B");
disp.forward(request, response);
System.out.println("servlet A completed");
PrintWriter pw = response.getWriter();
pw.println("servlet A")

servlet B

PrintWriter pw = response.getWriter();
pw.println("servlet B");

輸出結(jié)果:
控制臺:servlet A completed
頁面:servlet B
這表示在forward方法后的pw.println("servlet A")并未執(zhí)行

如果將forward換成include的話,則結(jié)果為:
控制臺:servlet A completed
頁面:servlet B servlet A
這表示include的servlet執(zhí)行完后,再返回到原來的servlet執(zhí)行response的輸出。
注意:如果在servlet B里吧pw給close掉了的話,那servlet A 這里就無法輸出了,則結(jié)果就和第一個(gè)一樣。

二、dispatcher元素

2.4版本的servlet規(guī)范在部屬描述符中新增加了一個(gè)<dispatcher>元素,這個(gè)元素有四個(gè)可能的值:即REQUEST,FORWARD,INCLUDE和ERROR,可以在一個(gè)<filter-mapping>元素中加入任意數(shù)目的<dispatcher>,使得filter將會(huì)作用于直接從客戶端過來的request(REQUEST),通過forward過來的request(FORWARD),通過include過來的request(INCLUDE)和通過<error-page>過來的request(ERROR)。如果沒有指定任何< dispatcher >元素,默認(rèn)值是REQUEST。
注意:<dispatcher></dispatcher>必須寫在filter-mapping的最后。dispatcher的前提條件當(dāng)然是要先滿足url-pattern,然后dispatcher有四種可能的屬性:
1、REQUEST
只要發(fā)起的操作是一次HTTP請求,比如請求某個(gè)URL、發(fā)起了一個(gè)GET請求、表單提交方式為POST的POST請求、表單提交方式為GET的GET請求。一次重定向則前后相當(dāng)于發(fā)起了兩次請求,這些情況下有幾次請求就會(huì)走幾次指定過濾器。
2、FOWARD
只有當(dāng)當(dāng)前頁面是通過請求轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)過來的情形時(shí),才會(huì)走指定的過濾器
3、INCLUDE
只要是通過<jsp:include page="xxx.jsp" />,嵌入進(jìn)來的頁面,每嵌入的一個(gè)頁面,都會(huì)走一次指定的過濾器。
4、ERROR
假如web.xml里面配置了<error-page></error-page>

<error-page>
    <error-code>400</error-code>
    <location>/filter/error.jsp</location>
</error-page>

<error-page>
    <error-code>404</error-code>
    <location>/filter/error.jsp</location>
</error-page>

<error-page>
    <error-code>500</error-code>
    <location>/filter/error.jsp</location>
</error-page>

意思是HTTP請求響應(yīng)的狀態(tài)碼只要是400、404、500三種狀態(tài)碼之一,容器就會(huì)將請求轉(zhuǎn)發(fā)到error.jsp下,這就觸發(fā)了一次error,走進(jìn)了配置的DispatchFilter。需要注意的是注意一點(diǎn)的是,雖然把請求轉(zhuǎn)發(fā)到error.jsp是一次forward的過程,但是配置成<dispatcher>FORWARD</dispatcher>并不會(huì)走DispatchFilter這個(gè)過濾器。
這四種dispatcher方式可以單獨(dú)使用,也可以組合使用,配置多個(gè)<dispatcher></dispatcher> 即可。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多