一、Servlet過(guò)濾器的概念:
***************************************************************************************
Servlet過(guò)濾器是在Java Servlet規范2.3中定義的,它能夠對Servlet容器的請求和響應對象進(jìn)行檢查和修改?! ?br>
Servlet過(guò)濾器本身并不產(chǎn)生請求和響應對象,它只能提供過(guò)濾作用。Servlet過(guò)期能夠在Servlet被調用之前檢查Request對象,修改Request Header和Request內容;在Servlet被調用之后檢查Response對象,修改Response Header和Response內容。
Servlet過(guò)期負責過(guò)濾的Web組件可以是Servlet、JSP或者HTML文件?!?br>***************************************************************************************
二、Servlet過(guò)濾器的特點(diǎn):
***************************************************************************************
A.Servlet過(guò)濾器可以檢查和修改ServletRequest和ServletResponse對象
B.Servlet過(guò)濾器可以被指定和特定的URL關(guān)聯(lián),只有當客戶(hù)請求訪(fǎng)問(wèn)該URL時(shí),才會(huì )觸發(fā)過(guò)濾器
C.Servlet過(guò)濾器可以被串聯(lián)在一起,形成管道效應,協(xié)同修改請求和響應對象
***************************************************************************************
三、Servlet過(guò)濾器的作用:
***************************************************************************************
A.查詢(xún)請求并作出相應的行動(dòng)。
B.阻塞請求-響應對,使其不能進(jìn)一步傳遞。
C.修改請求的頭部和數據。用戶(hù)可以提供自定義的請求。
D.修改響應的頭部和數據。用戶(hù)可以通過(guò)提供定制的響應版本實(shí)現。
E.與外部資源進(jìn)行交互。
***************************************************************************************
四、Servlet過(guò)濾器的適用場(chǎng)合:
***************************************************************************************
A.認證過(guò)濾
B.登錄和審核過(guò)濾
C.圖像轉換過(guò)濾
D.數據壓縮過(guò)濾
E.加密過(guò)濾
F.令牌過(guò)濾
G.資源訪(fǎng)問(wèn)觸發(fā)事件過(guò)濾
H.XSL/T過(guò)濾
I.Mime-type過(guò)濾
***************************************************************************************
五、Servlet過(guò)濾器接口的構成:
***************************************************************************************
所有的Servlet過(guò)濾器類(lèi)都必須實(shí)現javax.servlet.Filter接口。這個(gè)接口含有3個(gè)過(guò)濾器類(lèi)必須實(shí)現的方法:
A.init(FilterConfig):
這是Servlet過(guò)濾器的初始化方法,Servlet容器創(chuàng )建Servlet過(guò)濾器實(shí)例后將調用這個(gè)方法。在這個(gè)方法中可以讀取web.xml文件中Servlet過(guò)濾器的初始化參數
B.doFilter(ServletRequest,ServletResponse,FilterChain):
這個(gè)方法完成實(shí)際的過(guò)濾操作,當客戶(hù)請求訪(fǎng)問(wèn)于過(guò)濾器關(guān)聯(lián)的URL時(shí),Servlet容器將先調用過(guò)濾器的doFilter方法。FilterChain參數用于訪(fǎng)問(wèn)后續過(guò)濾器
B.destroy():
Servlet容器在銷(xiāo)毀過(guò)濾器實(shí)例前調用該方法,這個(gè)方法中可以釋放Servlet過(guò)濾器占用的資源
***************************************************************************************
六、Servlet過(guò)濾器的創(chuàng )建步驟:
***************************************************************************************
A.實(shí)現javax.servlet.Filter接口
B.實(shí)現init方法,讀取過(guò)濾器的初始化函數
C.實(shí)現doFilter方法,完成對請求或過(guò)濾的響應
D.調用FilterChain接口對象的doFilter方法,向后續的過(guò)濾器傳遞請求或響應
E.銷(xiāo)毀過(guò)濾器
***************************************************************************************
七、Servlet過(guò)濾器對請求的過(guò)濾:
***************************************************************************************
A.Servlet容器創(chuàng )建一個(gè)過(guò)濾器實(shí)例
B.過(guò)濾器實(shí)例調用init方法,讀取過(guò)濾器的初始化參數
C.過(guò)濾器實(shí)例調用doFilter方法,根據初始化參數的值判斷該請求是否合法
D.如果該請求不合法則阻塞該請求
E.如果該請求合法則調用chain.doFilter方法將該請求向后續傳遞
***************************************************************************************
八、Servlet過(guò)濾器對響應的過(guò)濾:
***************************************************************************************
A.過(guò)濾器截獲客戶(hù)端的請求
B.重新封裝ServletResponse,在封裝后的ServletResponse中提供用戶(hù)自定義的輸出流
C.將請求向后續傳遞
D.Web組件產(chǎn)生響應
E.從封裝后的ServletResponse中獲取用戶(hù)自定義的輸出流
F.將響應內容通過(guò)用戶(hù)自定義的輸出流寫(xiě)入到緩沖流中
G.在緩沖流中修改響應的內容后清空緩沖流,輸出響應內容
***************************************************************************************
九、Servlet過(guò)濾器的發(fā)布:
***************************************************************************************
A.發(fā)布Servlet過(guò)濾器時(shí),必須在web.xml文件中加入<filter>元素和<filter-mapping>元素。
B.<filter>元素用來(lái)定義一個(gè)過(guò)濾器:
屬性 含義
filter-name 指定過(guò)濾器的名字
filter-class 指定過(guò)濾器的類(lèi)名
init-param 為過(guò)濾器實(shí)例提供初始化參數,可以有多個(gè)
C.<filter-mapping>元素用于將過(guò)濾器和URL關(guān)聯(lián):
屬性 含義
filter-name 指定過(guò)濾器的名字
url-pattern 指定和過(guò)濾器關(guān)聯(lián)的URL,為”/*”表示所有URL
***************************************************************************************
十一、Servlet過(guò)濾器使用的注意事項
***************************************************************************************
A.由于Filter、FilterConfig、FilterChain都是位于javax.servlet包下,并非HTTP包所特有的,所以其中所用到的請求、響應對象ServletRequest、ServletResponse在使用前都必須先轉換成HttpServletRequest、HttpServletResponse再進(jìn)行下一步操作。
B.在web.xml中配置Servlet和Servlet過(guò)濾器,應該先聲明過(guò)濾器元素,再聲明Servlet元素
C.如果要在Servlet中觀(guān)察過(guò)濾器生成的日志,應該確保在server.xml的localhost對應的<host>元素中配置如下<logger>元素:
<Logger className = “org.apache.catalina.logger.FileLogger”
directory = “logs”prefix = “localhost_log.”suffix=”.txt”
timestamp = “true”/>
***************************************************************************************
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。