夢想飛翔

          自強不息
          posts - 111, comments - 30, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          JAVA WEB學習筆記(四)-Servlet過濾器

          Posted on 2007-04-23 12:03 love1563 閱讀(205) 評論(0)  編輯  收藏 所屬分類: JSP/Servlets/JSF
          一、Servlet過濾器的概念:
          ***************************************************************************************
          Servlet過濾器是在Java?Servlet規(guī)范2.3中定義的,它能夠?qū)ervlet容器的請求和響應對象進行檢查和修改。   

          Servlet過濾器本身并不產(chǎn)生請求和響應對象,它只能提供過濾作用。Servlet過期能夠在Servlet被調(diào)用之前檢查Request對象,修改Request?Header和Request內(nèi)容;在Servlet被調(diào)用之后檢查Response對象,修改Response?Header和Response內(nèi)容。

          Servlet過期負責過濾的Web組件可以是Servlet、JSP或者HTML文件。 
          ***************************************************************************************


          二、Servlet過濾器的特點:
          ***************************************************************************************
          A.Servlet過濾器可以檢查和修改ServletRequest和ServletResponse對象
          B.Servlet過濾器可以被指定和特定的URL關(guān)聯(lián),只有當客戶請求訪問該URL時,才會觸發(fā)過濾器
          C.Servlet過濾器可以被串聯(lián)在一起,形成管道效應,協(xié)同修改請求和響應對象
          ***************************************************************************************


          三、Servlet過濾器的作用:
          ***************************************************************************************
          A.查詢請求并作出相應的行動。
          B.阻塞請求-響應對,使其不能進一步傳遞。
          C.修改請求的頭部和數(shù)據(jù)。用戶可以提供自定義的請求。
          D.修改響應的頭部和數(shù)據(jù)。用戶可以通過提供定制的響應版本實現(xiàn)。
          E.與外部資源進行交互。
          ***************************************************************************************


          四、Servlet過濾器的適用場合:
          ***************************************************************************************
          A.認證過濾
          B.登錄和審核過濾
          C.圖像轉(zhuǎn)換過濾?
          D.數(shù)據(jù)壓縮過濾?
          E.加密過濾?
          F.令牌過濾?
          G.資源訪問觸發(fā)事件過濾?
          H.XSL/T過濾?
          I.Mime-type過濾
          ***************************************************************************************


          五、Servlet過濾器接口的構(gòu)成:
          ***************************************************************************************
          所有的Servlet過濾器類都必須實現(xiàn)javax.servlet.Filter接口。這個接口含有3個過濾器類必須實現(xiàn)的方法:

          A.init(FilterConfig):
          這是Servlet過濾器的初始化方法,Servlet容器創(chuàng)建Servlet過濾器實例后將調(diào)用這個方法。在這個方法中可以讀取web.xml文件中Servlet過濾器的初始化參數(shù)

          B.doFilter(ServletRequest,ServletResponse,FilterChain):
          這個方法完成實際的過濾操作,當客戶請求訪問于過濾器關(guān)聯(lián)的URL時,Servlet容器將先調(diào)用過濾器的doFilter方法。FilterChain參數(shù)用于訪問后續(xù)過濾器

          B.destroy():
          Servlet容器在銷毀過濾器實例前調(diào)用該方法,這個方法中可以釋放Servlet過濾器占用的資源
          ***************************************************************************************


          六、Servlet過濾器的創(chuàng)建步驟:
          ***************************************************************************************
          A.實現(xiàn)javax.servlet.Filter接口
          B.實現(xiàn)init方法,讀取過濾器的初始化函數(shù)
          C.實現(xiàn)doFilter方法,完成對請求或過濾的響應
          D.調(diào)用FilterChain接口對象的doFilter方法,向后續(xù)的過濾器傳遞請求或響應
          E.銷毀過濾器
          ***************************************************************************************


          七、Servlet過濾器對請求的過濾:
          ***************************************************************************************
          A.Servlet容器創(chuàng)建一個過濾器實例
          B.過濾器實例調(diào)用init方法,讀取過濾器的初始化參數(shù)
          C.過濾器實例調(diào)用doFilter方法,根據(jù)初始化參數(shù)的值判斷該請求是否合法
          D.如果該請求不合法則阻塞該請求
          E.如果該請求合法則調(diào)用chain.doFilter方法將該請求向后續(xù)傳遞
          ***************************************************************************************


          八、Servlet過濾器對響應的過濾:
          ***************************************************************************************
          A.過濾器截獲客戶端的請求
          B.重新封裝ServletResponse,在封裝后的ServletResponse中提供用戶自定義的輸出流
          C.將請求向后續(xù)傳遞
          D.Web組件產(chǎn)生響應
          E.從封裝后的ServletResponse中獲取用戶自定義的輸出流
          F.將響應內(nèi)容通過用戶自定義的輸出流寫入到緩沖流中
          G.在緩沖流中修改響應的內(nèi)容后清空緩沖流,輸出響應內(nèi)容
          ***************************************************************************************

          九、Servlet過濾器的發(fā)布:
          ***************************************************************************************
          A.發(fā)布Servlet過濾器時,必須在web.xml文件中加入<filter>元素和<filter-mapping>元素。

          B.<filter>元素用來定義一個過濾器:
          屬性???????????????????含義
          filter-name????指定過濾器的名字
          filter-class????指定過濾器的類名
          init-param????為過濾器實例提供初始化參數(shù),可以有多個

          C.<filter-mapping>元素用于將過濾器和URL關(guān)聯(lián):
          屬性?????????????????????含義
          filter-name????指定過濾器的名字
          url-pattern????指定和過濾器關(guān)聯(lián)的URL,為”/*”表示所有URL
          ***************************************************************************************


          十一、Servlet過濾器使用的注意事項
          ***************************************************************************************
          A.由于Filter、FilterConfig、FilterChain都是位于javax.servlet包下,并非HTTP包所特有的,所以其中所用到的請求、響應對象ServletRequest、ServletResponse在使用前都必須先轉(zhuǎn)換成HttpServletRequest、HttpServletResponse再進行下一步操作。

          B.在web.xml中配置Servlet和Servlet過濾器,應該先聲明過濾器元素,再聲明Servlet元素


          C.如果要在Servlet中觀察過濾器生成的日志,應該確保在server.xml的localhost對應的<host>元素中配置如下<logger>元素:
          <Logger?className?=?“org.apache.catalina.logger.FileLogger”
          directory?=?“l(fā)ogs”prefix?=?“l(fā)ocalhost_log.”suffix=”.txt”
          timestamp?=?“true”/>
          ***************************************************************************************
          主站蜘蛛池模板: 天柱县| 独山县| 土默特左旗| 登封市| 广汉市| 迁西县| 神木县| 林口县| 卢氏县| 贺兰县| 左云县| 庄河市| 陆川县| 徐闻县| 禄丰县| 海原县| 治多县| 巍山| 静乐县| 五大连池市| 碌曲县| 阿拉善右旗| 商都县| 靖宇县| 定兴县| 台北县| 金沙县| 浦东新区| 海宁市| 察哈| 弥渡县| 长泰县| 榆林市| 渑池县| 皮山县| 乌拉特前旗| 揭阳市| 湘西| 房山区| 高邮市| 婺源县|