乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       沙門(mén)空海 2018-01-17

      一、forward和include

      RequestDispatcher提供兩個(gè)方法forward和include進(jìn)行資源跳轉(zhuǎn)。
      不同的是,如果使用forward跳轉(zhuǎn)則其后面的response輸出則不會(huì)執(zhí)行,而用include來(lái)跳轉(zhuǎn),則include的servlet執(zhí)行完后,再返回到原來(lái)的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é)果:
      控制臺(tái):servlet A completed
      頁(yè)面:servlet B
      這表示在forward方法后的pw.println("servlet A")并未執(zhí)行

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

      二、dispatcher元素

      2.4版本的servlet規(guī)范在部屬描述符中新增加了一個(gè)<dispatcher>元素,這個(gè)元素有四個(gè)可能的值:即REQUEST,FORWARD,INCLUDE和ERROR,可以在一個(gè)<filter-mapping>元素中加入任意數(shù)目的<dispatcher>,使得filter將會(huì)作用于直接從客戶端過(guò)來(lái)的request(REQUEST),通過(guò)forward過(guò)來(lái)的request(FORWARD),通過(guò)include過(guò)來(lái)的request(INCLUDE)和通過(guò)<error-page>過(guò)來(lái)的request(ERROR)。如果沒(méi)有指定任何< dispatcher >元素,默認(rèn)值是REQUEST。
      注意:<dispatcher></dispatcher>必須寫(xiě)在filter-mapping的最后。dispatcher的前提條件當(dāng)然是要先滿足url-pattern,然后dispatcher有四種可能的屬性:
      1、REQUEST
      只要發(fā)起的操作是一次HTTP請(qǐng)求,比如請(qǐng)求某個(gè)URL、發(fā)起了一個(gè)GET請(qǐng)求、表單提交方式為POST的POST請(qǐng)求、表單提交方式為GET的GET請(qǐng)求。一次重定向則前后相當(dāng)于發(fā)起了兩次請(qǐng)求,這些情況下有幾次請(qǐng)求就會(huì)走幾次指定過(guò)濾器。
      2、FOWARD
      只有當(dāng)當(dāng)前頁(yè)面是通過(guò)請(qǐng)求轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)過(guò)來(lái)的情形時(shí),才會(huì)走指定的過(guò)濾器
      3、INCLUDE
      只要是通過(guò)<jsp:include page="xxx.jsp" />,嵌入進(jìn)來(lái)的頁(yè)面,每嵌入的一個(gè)頁(yè)面,都會(huì)走一次指定的過(guò)濾器。
      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請(qǐng)求響應(yīng)的狀態(tài)碼只要是400、404、500三種狀態(tài)碼之一,容器就會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到error.jsp下,這就觸發(fā)了一次error,走進(jìn)了配置的DispatchFilter。需要注意的是注意一點(diǎn)的是,雖然把請(qǐng)求轉(zhuǎn)發(fā)到error.jsp是一次forward的過(guò)程,但是配置成<dispatcher>FORWARD</dispatcher>并不會(huì)走DispatchFilter這個(gè)過(guò)濾器。
      這四種dispatcher方式可以單獨(dú)使用,也可以組合使用,配置多個(gè)<dispatcher></dispatcher> 即可。

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多