JavaWeb開發之Filter中的dispatcher標籤
阿新 • • 發佈:2019-01-01
dispatcher元素
2.4版本的servlet規範在部屬描述符中新增加了一個<dispatcher>
元素,這個元素有四個可能的值:即REQUEST,FORWARD,INCLUDE和ERROR,可以在一個<filter-mapping>
元素中加入任意數目的<dispatcher>
,使得filter將會作用於直接從客戶端過來的request(REQUEST),通過forward過來的request(FORWARD),通過include過來的request(INCLUDE)和通過<error-page>
過來的request(ERROR)。如果沒有指定任何 < dispatcher >
元素,預設值是REQUEST。
注意:<dispatcher></dispatcher>
必須寫在filter-mapping的最後。dispatcher的前提條件當然是要先滿足url-pattern,然後dispatcher有四種可能的屬性:
1、REQUEST
只要發起的操作是一次HTTP請求,比如請求某個URL、發起了一個GET請求、表單提交方式為POST的POST請求、表單提交方式為GET的GET請求。一次重定向則前後相當於發起了兩次請求,這些情況下有幾次請求就會走幾次指定過濾器。
2、FOWARD只有噹噹前頁面是通過請求轉發轉發過來的情形時,才會走指定的過濾器
只要是通過<jsp:include page="xxx.jsp" />
,嵌入進來的頁面,每嵌入的一個頁面,都會走一次指定的過濾器。
<error-page></error-page>
:<error-page> <error-code>400</error-code> <location>/filter/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/filter/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/filter/error.jsp</location> </error-page>
意思是HTTP請求響應的狀態碼只要是400、404、500三種狀態碼之一,容器就會將請求轉發到error.jsp下,這就觸發了一次error,走進了配置的DispatchFilter。需要注意的是注意一點的是,雖然把請求轉發到error.jsp是一次forward的過程,但是配置成<dispatcher>FORWARD</dispatcher>
並不會走DispatchFilter這個過濾器。
這四種dispatcher方式可以單獨使用,也可以組合使用,配置多個<dispatcher></dispatcher>
即可。