1. 程式人生 > >Filter過濾器的四種攔截方式和執行順序

Filter過濾器的四種攔截方式和執行順序

轉發:https://blog.csdn.net/dawiebazhanlang/article/details/80619870

多個過濾器攔截同一個目標資源
  一個目標資源可以指定多個過濾器,過濾器的執行順序是由web.xml檔案中的<filter-mapping></filter-mapping>的部署順序決定的。
一定要注意的是,那個Filter的執行順序和Filter在web.xml檔案中的位置先後無關,只和mapping的順序有關,誰的mapping在前,就先
執行誰,然後執行的順序是,接著執行下一個Filter,直到所有的過濾器執行結束,然後才是訪問目標資源。例如:AFilter和BFilter都
攔截AServlet,mapping配置如下:
<filter>
    <display-name>AFilter</display-name>
    <filter-name>AFilter</filter-name>
    <filter-class>day15_1.AFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AFilter</filter-name>
    <servlet-name>Aservlet</servlet-name>
  </filter-mapping>
  <filter>
    <display-name>BFilter</display-name>
    <filter-name>BFilter</filter-name>
    <filter-class>day15_1.BFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>BFilter</filter-name>
    <servlet-name>Aservlet</servlet-name>
  </filter-mapping>
(就是AFilter的mapping在BFilter之前,執行的結果如下圖。)

Filter四種攔截方式:
 * request(預設)
 * forward (攔截轉發)
 * include (攔截包含)
 * error (只攔截錯誤頁面)
如果想要以不同的方式攔截,我們需要在<Filter-mapping>中新增<Dispacher>forward</Dispachaer>(這個欄位會把之前的request
的值進行覆蓋。並且會攔截需要轉發的請求)
include 的用法和dispacher 的用法相似,不在進行介紹。
error的用法是用來來接錯誤資訊頁面,我們可以在web.xml的頁面中配置錯誤頁面的資訊,具體配置如下(在Mapping之外配置):
<error-page>
 <error-code>500</error-code>//此處應該寫的數錯誤狀態碼
 <location>/index.jsp</location>//此處應該寫的是攔截的具體路徑
</error-page>、
錯誤頁面的資訊配置完成之後,我們就可以像之前的request攔截一樣,在<Filter-mapping>中進行配置<Dispacher>error</Dispachaer>
這時候,當我們要訪問的頁面出錯誤時,過濾器便會自動進行攔截,同時我們可以使用request.sendError(500,"錯誤資訊");
來讓頁面產生錯誤。

注意:error的攔截只試用與錯誤頁面,所謂的錯誤頁面是在web.xml中配置的。
--------------------- 
作者:大尾巴戰狼 
來源:CSDN 
原文:https://blog.csdn.net/dawiebazhanlang/article/details/80619870 
版權宣告:本文為博主原創文章,轉載請附上博文連結!