posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          日歷

          <2012年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          搜索

          •  

          最新評論

          1、攔截器是基于java反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)的。
          2、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器。
          3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。
          4、攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能。
          5、在Action的生命周期中,攔截器可以多次調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次。

          過濾器是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設(shè)置一些參數(shù),然后再傳入servlet或者struts的 action進(jìn)行業(yè)務(wù)邏輯,
          比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),
          或者在傳入servlet或者 struts的action前統(tǒng)一設(shè)置字符集,
          或者去除掉一些非法字符(聊天室經(jīng)常用到的,一些罵人的話)。。。

          攔截器 可通過的是符合條件的action。 攔截器本身是一個(gè)普通的Java對象,它能動(dòng)態(tài)攔截Action調(diào)用,
          Action執(zhí)行前后執(zhí)行攔截器本身提供的各種個(gè)樣的Web項(xiàng)目需求。也可以阻止Action的執(zhí)行,同時(shí)也可以提取
          Action中可以復(fù)用的部分。
          前段時(shí)間參與一個(gè)項(xiàng)目,過濾器用的是Interceptor 覺得比以前用的Filter好用很多,現(xiàn)在拿出來比較一下
          Filter
              該過濾器的方法是創(chuàng)建一個(gè)類XXXFilter實(shí)現(xiàn)此接口,并在該類中的doFilter方法中聲明過濾規(guī)則,然后在配置文件web.xml中聲明他所過濾的路徑
              <filter>
                  <filter-name>XXXFilter</filter-name>
                  <filter-class>
                      com.web.util.XXXFilter
                  </filter-class>
              </filter>
             
              <filter-mapping>
                  <filter-name>XXXFilter</filter-name>
                  <url-pattern>*.action</url-pattern>
              </filter-mapping>
          Interceptor
               該過濾器的方法也是創(chuàng)建一個(gè)類XXXInterceptor實(shí)現(xiàn)此接口,在該類中intercept方法寫過濾規(guī)則,不過它過濾路徑的方法和Filter不同,它與strut.xml結(jié)合使用,
             創(chuàng)建一個(gè)strus.xml的子配置文件struts-l99-default.xml,它繼承與struts2的struts-default,此配置文件是其他子配置文件的父類,只要是繼承與該文件的配置文件所聲明的路徑都會(huì)被它過濾 如下
           <package name="XXX-default" namespace="/" extends="struts-default">
                  <interceptors>
                      <interceptor name="authentication" class="com.util.XXXInterceptor" />
                     
                      <interceptor-stack name="user">
                          <interceptor-ref name="defaultStack" />
                          <interceptor-ref name="authentication" />
                      </interceptor-stack>
                      <interceptor-stack name="user-submit">
                          <interceptor-ref name="user" />
                          <interceptor-ref name="token" />
                      </interceptor-stack>
                      <interceptor-stack name="guest">
                          <interceptor-ref name="defaultStack" />
                      </interceptor-stack>
                      <interceptor-stack name="guest-submit">
                          <interceptor-ref name="defaultStack" />
                          <interceptor-ref name="token" />
                      </interceptor-stack>
                  </interceptors>
                  <default-interceptor-ref name="user" />
             </package>
           比較一,filter基于回調(diào)函數(shù),我們需要實(shí)現(xiàn)的filter接口中doFilter方法就是回調(diào)函數(shù),而interceptor則基于java本身的反射機(jī)制,這是兩者最本質(zhì)的區(qū)別。
           比較二,filter是依賴于servlet容器的,即只能在servlet容器中執(zhí)行,很顯然沒有servlet容器就無法來回調(diào)doFilter方法。而interceptor與servlet容器無關(guān)。
           比較三,F(xiàn)ilter的過濾范圍比Interceptor大,Filter除了過濾請求外通過通配符可以保護(hù)頁面,圖片,文件等等,而Interceptor只能過濾請求。
           比較四,F(xiàn)ilter的過濾例外一般是在加載的時(shí)候在init方法聲明,而Interceptor可以通過在xml聲明是guest請求還是user請求來辨別是否過濾。
                  </filter-class>
              </filter>
             
              <filter-mapping>
                  <filter-name>XXXFilter</filter-name>
                  <url-pattern>*.action</url-pattern>
              </filter-mapping>
          Interceptor
               該過濾器的方法也是創(chuàng)建一個(gè)類XXXInterceptor實(shí)現(xiàn)此接口,在該類中intercept方法寫過濾規(guī)則,不過它過濾路徑的方法和Filter不同,它與strut.xml結(jié)合使用,
             創(chuàng)建一個(gè)strus.xml的子配置文件struts-l99-default.xml,它繼承與struts2的struts-default,此配置文件是其他子配置文件的父類,只要是繼承與該文件的配置文件所聲明的路徑都會(huì)被它過濾 如下
           <package name="XXX-default" namespace="/" extends="struts-default">
                  <interceptors>
                      <interceptor name="authentication" class="com.util.XXXInterceptor" />
                     
                      <interceptor-stack name="user">
                          <interceptor-ref name="defaultStack" />
                          <interceptor-ref name="authentication" />
                      </interceptor-stack>
                      <interceptor-stack name="user-submit">
                          <interceptor-ref name="user" />
                          <interceptor-ref name="token" />
                      </interceptor-stack>
                      <interceptor-stack name="guest">
                          <interceptor-ref name="defaultStack" />
                      </interceptor-stack>
                      <interceptor-stack name="guest-submit">
                          <interceptor-ref name="defaultStack" />
                          <interceptor-ref name="token" />
                      </interceptor-stack>
                  </interceptors>
                  <default-interceptor-ref name="user" />
             </package>
           比較一,filter基于回調(diào)函數(shù),我們需要實(shí)現(xiàn)的filter接口中doFilter方法就是回調(diào)函數(shù),而interceptor則基于java本身的反射機(jī)制,這是兩者最本質(zhì)的區(qū)別。
           比較二,filter是依賴于servlet容器的,即只能在servlet容器中執(zhí)行,很顯然沒有servlet容器就無法來回調(diào)doFilter方法。而interceptor與servlet容器無關(guān)。
           比較三,F(xiàn)ilter的過濾范圍比Interceptor大,Filter除了過濾請求外通過通配符可以保護(hù)頁面,圖片,文件等等,而Interceptor只能過濾請求。
           比較四,F(xiàn)ilter的過濾例外一般是在加載的時(shí)候在init方法聲明,而Interceptor可以通過在xml聲明是guest請求還是user請求來辨別是否過濾。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 闻喜县| 花莲县| 沁水县| 佛山市| 固阳县| 大邑县| 忻州市| 襄垣县| 永泰县| 承德市| 若羌县| 榆中县| 公安县| 敖汉旗| 攀枝花市| 富平县| 岳阳县| 依安县| 嘉黎县| 金山区| 梁河县| 曲阜市| 互助| 南昌市| 连州市| 渭南市| 平山县| 安义县| 诏安县| 张家界市| 新竹县| 松阳县| 修武县| 秭归县| 邵阳市| 金阳县| 桐梓县| 郴州市| 方城县| 准格尔旗| 龙泉市|