kxbin
          成功留給有準(zhǔn)備的人
          posts - 10,  comments - 35,  trackbacks - 0

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

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

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

          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函數(shù)的執(zhí)行順序 
          當(dāng)某個url請求匹配了多個Filter時,應(yīng)用服務(wù)器將多個Filter組織成FilterChain,這個鏈的執(zhí)行順序是由其<filter-mapping>元素在web.xml文件中的順序決定的。
          doFilter函數(shù)可以過濾請求或者響應(yīng),當(dāng)其過濾完請求后將調(diào)用FilterChain的doFilter函數(shù)讓FilterChain中的下一個Filter來過濾請求。最先過濾請求的Filter將最后過濾相應(yīng),下面是個簡單的例子。
          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函數(shù)的執(zhí)行順序 
              對于不同的應(yīng)用服務(wù)器,F(xiàn)ilter的init函數(shù)的執(zhí)行時間是不同的,例如:tomcat會在tomcat啟動的時候執(zhí)行init函數(shù),而weblogic等一些其他的應(yīng)用服務(wù)器則會在該Filter匹配的url被首次請求的時候加載。
          (下面的部分是我通過實驗猜想的,不一定正確。) 
              對于tomcat而言,tomcat啟動時會解析web.xml文件,然后按照<filter>元素的順序?qū)⒏鱾€Filter元素加載到一個 HashMap中。解析完成后,會從HashMap中一個個的拿出Filter元素,串行的執(zhí)行其init函數(shù)(這里的執(zhí)行有先后關(guān)系,是在一個線程中執(zhí) 行的)。所以在tomcat中定義的多個Filter其init函數(shù)的執(zhí)行順序就是其在HashMap中的散列順序,具體來說與其在web.xml文件中 的定義位置及其名字有關(guān)。
              對于HashMap來說,如果其元素固定不變,則其順序也是固定不變的,但當(dāng)元素個數(shù)發(fā)生變化時,便不能保證其順序(例如:當(dāng)有兩個元素時,A在B的前面,當(dāng)再加入20個元素的時候A就不一定在B的前面了),所以init函數(shù)的執(zhí)行順序是無法保證的。
          posted on 2011-12-28 08:58 kxbin 閱讀(5153) 評論(0)  編輯  收藏 所屬分類: J2EE
          你恨一個人是因為你愛他;你喜歡一個人,是因為他身上有你沒有的;你討厭一個人是因為他身上有你有的東西;你經(jīng)常在別人面前批評某人,其實潛意識中是想接近他。

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

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          J2EE

          java技術(shù)網(wǎng)站

          Linux

          平時常去的網(wǎng)站

          數(shù)據(jù)庫

          電影網(wǎng)站

          網(wǎng)站設(shè)計

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 四平市| 大港区| 安丘市| 德兴市| 拜城县| 疏勒县| 方正县| 香格里拉县| 阿城市| 上蔡县| 维西| 南丹县| 麦盖提县| 云阳县| 普安县| 宣威市| 梁平县| 兰溪市| 新建县| 蒲江县| 唐河县| 宿松县| 郯城县| 桐庐县| 靖江市| 榕江县| 衡东县| 新乡县| 嘉定区| 潮州市| 集安市| 县级市| 上思县| 西乌| 远安县| 遂溪县| 晋中市| 汶上县| 德阳市| 尖扎县| 宁城县|