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

來源:互聯網
上載者:User
一、Servlet過濾器的概念:
***************************************************************************************
Servlet過濾器是在Java Servlet規範2.3中定義的,它能夠對Servlet容器的請求和響應對象進行檢查和修改。   

Servlet過濾器本身並不產生請求和響應對象,它只能提供過濾作用。Servlet到期能夠在Servlet被調用之前檢查Request對象,修改Request Header和Request內容;在Servlet被調用之後檢查Response對象,修改Response Header和Response內容。

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

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

三、Servlet過濾器的作用:
***************************************************************************************
A.查詢請求並作出相應的行動。
B.阻塞要求-回應對,使其不能進一步傳遞。
C.修改請求的頭部和資料。使用者可以提供自訂的請求。
D.修改響應的頭部和資料。使用者可以通過提供定製的響應版本實現。
E.與外部資源進行互動。
***************************************************************************************

四、Servlet過濾器的適用場合:
***************************************************************************************
A.認證過濾
B.登入和審核過濾
C.映像轉換過濾 
D.資料壓縮過濾 
E.加密過濾 
F.令牌過濾 
G.資源訪問觸發事件過濾 
H.XSL/T過濾 
I.Mime-type過濾
***************************************************************************************

五、Servlet過濾器介面的構成:
***************************************************************************************
所有的Servlet過濾器類都必須實現javax.servlet.Filter介面。這個介面含有3個過濾器類必須實現的方法:

A.init(FilterConfig):
這是Servlet過濾器的初始化方法,Servlet容器建立Servlet過濾器執行個體後將調用這個方法。在這個方法中可以讀取web.xml檔案中Servlet過濾器的初始化參數

B.doFilter(ServletRequest,ServletResponse,FilterChain):
這個方法完成實際的過濾操作,當客戶請求訪問於過濾器關聯的URL時,Servlet容器將先調用過濾器的doFilter方法。FilterChain參數用於訪問後續過濾器

B.destroy():
Servlet容器在銷毀過濾器執行個體前調用該方法,這個方法中可以釋放Servlet過濾器佔用的資源
***************************************************************************************

六、Servlet過濾器的建立步驟:
***************************************************************************************
A.實現javax.servlet.Filter介面
B.實現init方法,讀取過濾器的初始化函數
C.實現doFilter方法,完成對請求或過濾的響應
D.調用FilterChain介面對象的doFilter方法,向後續的過濾器傳遞請求或響應
E.銷毀過濾器
***************************************************************************************

七、Servlet過濾器對請求的過濾:
***************************************************************************************
A.Servlet容器建立一個過濾器執行個體
B.過濾器執行個體調用init方法,讀取過濾器的初始化參數
C.過濾器執行個體調用doFilter方法,根據初始化參數的值判斷該請求是否合法
D.如果該請求不合法則阻塞該請求
E.如果該請求合法則調用chain.doFilter方法將該請求向後續傳遞
***************************************************************************************

八、Servlet過濾器對響應的過濾:
***************************************************************************************
A.過濾器截獲用戶端的請求
B.重新封裝ServletResponse,在封裝後的ServletResponse中提供使用者自訂的輸出資料流
C.將請求向後續傳遞
D.Web組件產生響應
E.從封裝後的ServletResponse中擷取使用者自訂的輸出資料流
F.將響應內容通過使用者自訂的輸出資料流寫入到緩衝流中
G.在緩衝流中修改響應的內容後清空緩衝流,輸出響應內容
***************************************************************************************

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

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

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

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

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

C.如果要在Servlet中觀察過濾器產生的日誌,應該確保在server.xml的localhost對應的<host>元素中配置如下<logger>元素:
<Logger className = “org.apache.catalina.logger.FileLogger”
directory = “logs”prefix = “localhost_log.”suffix=”.txt”
timestamp = “true”/>
***************************************************************************************

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.