通州北大青鳥學(xué)術(shù)部:Servlet四種過濾器的工作方式

        通州北大青鳥學(xué)術(shù)部提供:從J2EE1.3開始,Servlet2.3規(guī)范中加入了對過濾器的支持。過濾器能夠?qū)δ繕?biāo)資源的請求和響應(yīng)進(jìn)行截取。過濾器的工作方式分為四種,下面,通州北大青鳥學(xué)術(shù)部老師就給大家介紹一下這四種過濾器的工作方式:

        1、request過濾器
        這種過濾器的工作方式比較簡單,大家也經(jīng)常遇到,如下所示:以下是web.xml文件配置方式:
           <filter>
          <filter-name>myFilter</filter-name>
          <filter-class>packagename.MyFilterName</filter-class>
          </filter>
          <filter-mapping>
          <filter-name>myFilter</filter>
          <servlet-name> 目標(biāo)資源</servlet-name>
          </filter-mapping>
          <filter>

        下面我們更改一下web.xml文件的配置,如下方式:
           <filter-name>myFilter</filter-name>
          <filter-class>packagename.MyFilterName</filter-class>
          </filter>
          <filter-mapping>
          <filter-name>myFilter</filter>
          <servlet-name> 目標(biāo)資源1</servlet-name>
          </filter-mapping>
          <filter-mapping>
          <filter-name>myFilter</filter>
          <servlet-name> 目標(biāo)資源2</servlet-name>
          </filter-mapping>


        也就是說此過濾器對目標(biāo)資源一和目標(biāo)資源二都進(jìn)行過濾,然后當(dāng)目標(biāo)資源一被訪問的時(shí)候我們將請求轉(zhuǎn)發(fā)給目標(biāo)資源二,那么這個(gè)時(shí)候過濾器是怎么工作的呢?如下圖所示:我們可以看到,當(dāng)我們訪問目標(biāo)資源一時(shí)過濾器截取了請求,然后再轉(zhuǎn)發(fā)給目標(biāo)資源一,然后再轉(zhuǎn)發(fā)給目標(biāo)資源二,從圖中我們可以看到過濾器沒有截取轉(zhuǎn)發(fā)到目標(biāo)資源二的請求,但是我們已經(jīng)在web.xml文件中配置了該過濾器對目標(biāo)資源二的過濾,為什么又沒有起到過濾作用呢? 通州北大青鳥

        答案就在于,目標(biāo)資源一是客戶端直接訪問,而目標(biāo)資源二是被轉(zhuǎn)發(fā)過來的,這時(shí)過濾器就不能過濾目標(biāo)資源二。如果你直接訪問目標(biāo)資源二,你會發(fā)現(xiàn)該過濾器起到了作用?
         我們上面的web.xml文件配置與以下方式等價(jià):
           <filter-name>myFilter</filter-name>
          <filter-class>packagename.MyFilterName</filter-class>
          </filter>
          <filter-mapping>
          <filter-name>myFilter</filter>
          <servlet-name> 目標(biāo)資源1</servlet-name>
          <dispatcher>REQUEST</dispatcher>
          </filter-mapping>
          <filter-mapping>
          <filter-name>myFilter</filter>
          <servlet-name> 目標(biāo)資源2</servlet-name>
          <dispatcher>REQUEST</dispatcher>
          </filter-mapping>


        這種方式的配置,說明只有直接訪問該目標(biāo)資源時(shí)該過濾器才會起作用,對轉(zhuǎn)發(fā)到該目標(biāo)資源的請求將忽略不處理。
        那如果我想對轉(zhuǎn)發(fā)到目標(biāo)資源二的請求進(jìn)行過濾,那怎么辦呢?答案見,下一種過濾器,forward過濾器。
        2、forward過濾器 (通州北大青鳥)
        我們將web.xml文件的配置修改如下:
          
        <filter-name>myFilter</filter-name>
         <filter-class>packagename.MyFilterName</filter-class>
         </filter>
         <filter-mapping>
         <filter-name>myFilter</filter>
         <servlet-name> 目標(biāo)資源1</servlet-name>
         <dispatcher>REQUEST</dispatcher>
         </filter-mapping>
         <filter-mapping>
         <filter-name>myFilter</filter>
         <servlet-name> 目標(biāo)資源2</servlet-name>
         <dispatcher>FORWARD</dispatcher>
         </filter-mapping>

        我們看對目標(biāo)資源二過濾的配置方式,這時(shí)過濾方式為forward,也就是說對轉(zhuǎn)發(fā)到目標(biāo)資源二的請求過濾,如果直接訪問目標(biāo)資源二,過濾器將不起作用。
          3、include過濾器
        理解了forward過濾器之后,include過濾器就不難理解了。以下方式:
          <filter-name>myFilter</filter-name>
         <filter-class>packagename.MyFilterName</filter-class>
         </filter>
         <filter-mapping>
         <filter-name>myFilter</filter>
         <servlet-name> 目標(biāo)資源1</servlet-name>
         <dispatcher>REQUEST</dispatcher>
         </filter-mapping>
         <filter-mapping>
         <filter-name>myFilter</filter>
         <servlet-name> 目標(biāo)資源2</servlet-name>
         <dispatcher>INCLUDE</dispatcher>
         </filter-mapping>

        此表示對包含了目標(biāo)資源二的請求過濾,如果直接訪問目標(biāo)資源二,則此過濾器將不起作用。 (通州北大青鳥)
        在JSP頁面中的動作:指令包含,這時(shí)此過濾器不工作。

        4、error過濾器
        當(dāng)我們訪問一個(gè)web目標(biāo)資源時(shí),²耀服務(wù)器沒有找到該目標(biāo)資源,那么服務(wù)器就會給出一個(gè)404錯(cuò)誤代碼。如果我們給404錯(cuò)誤代碼定義一個(gè)頁面,那么當(dāng)404錯(cuò)誤發(fā)生時(shí)就會調(diào)用該頁面,請看以下web.xml文件的配置:

          <filter-name>myFilter</filter-name>
         <filter-class>packagename.MyFilterName</filter-class>
         </filter>
         <filter-mapping>
         <filter-name>myFilter</filter>
         <servlet-name> /error.jsp</servlet-name>
         <dispatcher>ERROR</dispatcher>
         </filter-mapping>
         <error-page>
         <error-code>404</error-code>
         <location>/error.jsp</location>
         </error-page>


        當(dāng)我們訪問一個(gè)不存在的文件時(shí),就會訪問error.jsp,但是配置了過濾器對錯(cuò)誤頁面進(jìn)行過濾,所以過濾器先接受到請求,然后再轉(zhuǎn)發(fā)給error.jsp。 (通州北大青鳥)
        如果我們訪問一個(gè)已經(jīng)存在的頁面,會不會調(diào)用error.jsp呢?如果這個(gè)頁面中有response.sendError(404,"出錯(cuò)了!");那么該錯(cuò)誤頁面仍然會被調(diào)用,過濾器也會工作

      (通州北大青鳥)

      北大青鳥網(wǎng)上報(bào)名
      北大青鳥招生簡章
      主站蜘蛛池模板: 台湾无码AV一区二区三区| 精品视频在线观看你懂的一区| 精品无码国产一区二区三区51安 | 天美传媒一区二区三区| 国产品无码一区二区三区在线蜜桃| 国产亚洲日韩一区二区三区 | 亚洲区精品久久一区二区三区 | 内射白浆一区二区在线观看| 国产精品男男视频一区二区三区| 亚洲国产精品无码久久一区二区| 亚洲日韩国产欧美一区二区三区 | 国产一区二区内射最近更新| 88国产精品视频一区二区三区| 无码毛片一区二区三区视频免费播放 | 国产精品美女一区二区三区| 亚洲国产综合精品中文第一区| 无码精品一区二区三区| 国产在线视频一区二区三区98| 亚洲欧洲专线一区| 中文字幕无线码一区| 在线精品亚洲一区二区小说| www亚洲精品少妇裸乳一区二区 | 亚洲日本一区二区三区在线不卡| 亚洲精品国产suv一区88| 亚洲一区中文字幕| 性色AV一区二区三区无码| 国产精品亚洲一区二区三区久久| 精品少妇人妻AV一区二区| 乱色精品无码一区二区国产盗| 果冻传媒一区二区天美传媒| 无码国产精品一区二区免费16 | 亚洲av成人一区二区三区在线播放| 麻豆天美国产一区在线播放| 成人中文字幕一区二区三区 | 精品国产一区二区22| 亚洲一区二区三区电影| 波多野结衣在线观看一区二区三区 | 亚洲国产一区二区三区青草影视| 亚洲熟妇无码一区二区三区| 波多野结衣中文字幕一区| 无码少妇一区二区性色AV|