kxbin
          成功留給有準備的人
          posts - 10,  comments - 35,  trackbacks - 0

          Filter是一個很有用的東西,使用filter可以修改request, response, session, application中的內容。

          1. javax.servlet.Filter有兩個重要的方法 
          public void init(FilterConfig config)
          public void doFilter(ServletRequest request, ServletResponse response, 

            FilterChain chain)
          其中init方法用來作一些初始化的方法,而doFilter方法用來執行真正的過濾操作。

          2. Filter的部署方法 
          在web.xml中要聲明filter元素,并分配需要其處理的url,如下:
          <filter>
              <filter-name>Filter1</filter-name>
              <filter-class>com.baidu.Filter1</filter-class>
          </filter>
          <filter>
              <filter-name>Filter2</filter-name>
              <filter-class>com.baidu.Filter2</filter-class>
          </filter>
          <filter-mapping>
              <filter-name>Filter1</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>
          <filter-mapping>
              <filter-name>Filter2</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>

          3. doFilter函數的執行順序 
          當某個url請求匹配了多個Filter時,應用服務器將多個Filter組織成FilterChain,這個鏈的執行順序是由其<filter-mapping>元素在web.xml文件中的順序決定的。
          doFilter函數可以過濾請求或者響應,當其過濾完請求后將調用FilterChain的doFilter函數讓FilterChain中的下一個Filter來過濾請求。最先過濾請求的Filter將最后過濾相應,下面是個簡單的例子。
          public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException
          {
                 system.out.println(“filter request here ----”);
                  // todo:
                 chain.doFilter(request,response);
                 system.out.println(“filter response here ----”);
                  // todo:

          }

          4.init函數的執行順序 
              對于不同的應用服務器,Filter的init函數的執行時間是不同的,例如:tomcat會在tomcat啟動的時候執行init函數,而weblogic等一些其他的應用服務器則會在該Filter匹配的url被首次請求的時候加載。
          (下面的部分是我通過實驗猜想的,不一定正確。) 
              對于tomcat而言,tomcat啟動時會解析web.xml文件,然后按照<filter>元素的順序將各個Filter元素加載到一個 HashMap中。解析完成后,會從HashMap中一個個的拿出Filter元素,串行的執行其init函數(這里的執行有先后關系,是在一個線程中執 行的)。所以在tomcat中定義的多個Filter其init函數的執行順序就是其在HashMap中的散列順序,具體來說與其在web.xml文件中 的定義位置及其名字有關。
              對于HashMap來說,如果其元素固定不變,則其順序也是固定不變的,但當元素個數發生變化時,便不能保證其順序(例如:當有兩個元素時,A在B的前面,當再加入20個元素的時候A就不一定在B的前面了),所以init函數的執行順序是無法保證的。
          posted on 2011-12-28 08:58 kxbin 閱讀(5154) 評論(0)  編輯  收藏 所屬分類: J2EE
          你恨一個人是因為你愛他;你喜歡一個人,是因為他身上有你沒有的;你討厭一個人是因為他身上有你有的東西;你經常在別人面前批評某人,其實潛意識中是想接近他。

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          J2EE

          java技術網站

          Linux

          平時常去的網站

          數據庫

          電影網站

          網站設計

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 德保县| 北宁市| 海南省| 泸州市| 盱眙县| 剑阁县| 惠来县| 洱源县| 临沧市| 五大连池市| 定结县| 玛沁县| 克拉玛依市| 怀柔区| 河西区| 红原县| 新丰县| 南昌县| 花莲市| 册亨县| 清远市| 滁州市| 兴安盟| 略阳县| 十堰市| 永宁县| 金门县| 城口县| 通州区| 沁阳市| 自贡市| 巴马| 延吉市| 屏东市| 鄢陵县| 平远县| 吴川市| 佛坪县| 宣汉县| 象州县| 辰溪县|