<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    過濾器的工作方式

     從J2EE1.3開始,Servlet2.3規范中加入了對過濾器的支持。過濾器能夠對目標資源的請求和響應進行截取。過濾器的工作方式分為四種,下面讓我們分別來看看這四種過濾器的工作方式:
    1、request過濾器
        這種過濾器的工作方式比較簡單,大家也經常遇到,如下圖所示:

    以下是web.xml文件配置方式:
    <filter>
        
    <filter-name>myFilter</filter-name>
        
    <filter-class>xx.MyFilter</filter-class>
    </filter>
    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <servlet-name>目標資源一</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>目標資源一</servlet-name>
    </filter-mapping>
    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <servlet-name>目標資源二</servlet-name>
    </filter-mapping>

    也就是說此過濾器對目標資源一和目標資源二進行過濾,然后當目標資源一被訪問的時候我們將請求轉發給目標資源二,那么這個時候過濾器是怎么工作的呢?如下圖所示:

        我們可以看到,當我們訪問目標資源一時過濾器截取了請求,然后再轉發給目標資源一,然后再轉發給目標資源二,從圖中我們可以看到過濾器沒有截取轉發到目標資源二的請求,但是我們已經在web.xml文件中配置了該過濾器對目標資源二的過濾,為什么又沒有起到過濾作用呢?

        答案就在于,目標資源一是客戶端直接訪問,而目標資源二是被轉發過來的,這時過濾器就不能過濾目標資源二。如果你直接訪問目標資源二,你會發現該過濾器起到了作用!
        我們上面的web.xml文件配置與以下方式等價:

    <filter>myFilter</filter>
        
    <filter-name>myFilter</filter-name>
        
    <filter-class>xx.MyFilter</filte-class>
    </filter>
    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <servlet-name>目標資源一</servlet-name>
      
    <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <servlet-name>目標資源二</servlet-name>
      
    <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    這種方式的配置,說明只有直接訪問該目標資源時該過濾器才會起作用,對轉發到該目標資源的請求將忽略不處理
        那如果我想對轉發到目標資源二的請求進行過濾,那怎么辦呢?答案見,下一種過濾器,forward過濾器


    2、forward過濾器
       
    我們將web.xml文件的配置修改如下:

    <filter>myFilter</filter>
        
    <filter-name>myFilter</filter-name>
        
    <filter-class>xx.MyFilter</filter-class>
    </filter>
    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <servlet-name>目標資源一</servlet-name>
      
    <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <servlet-name>目標資源二</servlet-name>
      
    <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

    工作方式如下圖所示:
        我們看對目標資源二過濾的配置方式,這時過濾方式為forward,也就是說對轉發到目標資源二的請求過濾,如果直接訪問目標資源二,過濾器將不起作用。

    3、include過濾器
        理解了forward過濾器之后,include過濾器就不難理解了。以下方式:

    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <servlet-name>目標資源二</servlet-name>
      
    <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

     此表示對包含了目標資源二的請求過濾,如果直接訪問目標資源二,則此過濾器將不起作用。
        include包含以下語句:
        在JSP頁面中的動作:<jsp:include page=.......

        在Java代碼中的request.getRequestDispatcher("....").include
        注意:如果目標資源一通過<%@ include file="目標資源二"%>指令包含,這時此過濾器不工作

    4、error過濾器
       
    當我們訪問一個web目標資源時,如果服務器沒有找到該目標資源,那么服務器就會給出一個404錯誤代碼。如果我們給404錯誤代碼定義一個頁面,那么當404錯誤發生時就會調用該頁面,請看以下web.xml文件的配置:

    <filter-mapping>
      
    <filter-name>myFilter</filter-name>
      
    <url-pattern>/error.jsp</url-pattern>
      
    <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    <error-page>
        
    <error-code>404</error-code>
        
    <location>/error.jsp</location>
    </error-page>

    當我們訪問一個不存在的文件時,就會訪問error.jsp,但是配置了過濾器對錯誤頁面進行過濾,所以過濾器先接受到請求,然后再轉發給error.jsp。

        如果我們訪問一個已經存在的頁面,會不會調用error.jsp呢?如果這個頁面中有response.sendError(404,"出錯了!");那么該錯誤頁面仍然會被調用,過濾器也會工作。




    posted on 2007-11-26 23:59 々上善若水々 閱讀(908) 評論(0)  編輯  收藏 所屬分類: JavaWeb

    主站蜘蛛池模板: 亚洲偷自精品三十六区| 亚洲一区二区三区AV无码| 岛国精品一区免费视频在线观看| 大陆一级毛片免费视频观看i| 亚洲综合色区中文字幕| 18禁止观看免费私人影院| 亚洲人成777在线播放| 国产在线国偷精品产拍免费| 亚洲人成人无码.www石榴| 四虎影视www四虎免费| 特级毛片免费播放| 国产成人免费a在线视频色戒| 在线观看免费亚洲| 亚洲AV无码一区二区三区国产| 曰批免费视频播放免费 | 亚洲色无码专区在线观看| 中国一级特黄的片子免费| 亚洲国产精品久久66| 1000部拍拍拍18勿入免费视频软件 | 男人天堂免费视频| 亚洲福利视频导航| 免费可以在线看A∨网站| 国产成人不卡亚洲精品91| 中文字幕亚洲乱码熟女一区二区| 国产免费爽爽视频在线观看| 亚洲沟沟美女亚洲沟沟| 麻豆精品国产免费观看| 一区二区三区免费在线观看| 久久亚洲国产精品| 欧洲美熟女乱又伦免费视频| 日韩在线视频播放免费视频完整版| 亚洲精品乱码久久久久久中文字幕 | 日日摸夜夜添夜夜免费视频| 国产成人精品日本亚洲网站| 国产免费女女脚奴视频网| 免费人成大片在线观看播放| 久久亚洲熟女cc98cm| 三级黄色在线免费观看| 亚洲妇女水蜜桃av网网站| 又黄又爽的视频免费看| 久久国产精品免费网站|