過濾器Filter的基本概述

過濾器Filter的基本概述

Filter:客戶端訪問Web資源時,可以進行請求和響應的攔截,

         如果條件成立,纔可以讓客戶端訪問Web資源

         如果條件不成立,不可以讓客戶端訪問Web資源



可用於全站字符編碼統一,權限控制,,,


開發Filter簡單步驟

1 創建一個JavaWeb工程

2 創建一個普通Java類,去實現Filter接口

public class MyFilter implements Filter {

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {

System.out.println("aaaaa");

//將請求放行,繼續訪問index.jsp

chain.doFilter(req,res);

System.out.println("bbbbb");

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}

}

3 在web.xml文件中對Filter進行配置

<!-- Filter基本信息 -->

  <filter>

  <!-- Filter取一個別名 -->

  <filter-name>MyFilter</filter-name>

  <!-- Filter的全名(包名+類名) -->

  <filter-class>com.aaa.filter.MyFilter</filter-class>

  </filter>

 

  <!-- Filter過濾信息 -->

  <filter-mapping>

  <!-- Filter取一個別名,同上 -->

  <filter-name>MyFilter</filter-name>

  <!-- Filter的過濾路徑,如你們訪問我的index.jsp時,Filter就會進行過濾或攔截,配個/*所有請求都過濾 -->

  <url-pattern>/index.jsp</url-pattern>

  </filter-mapping>


Filter的生命週期

Filter:

無參構造器->init(),在web服務器啓動時執行,且只執行一次

doFilter,當Filter需要過濾web.xml文件中配置的路徑時,這時

doFilter會執行,可以執行N

Web服務器決定不要Filter了,就將Filter刪除,在刪除前先執行

destroy方法,且一個Filter只執行一次。

無參構造器,init()destroy(),只執行一次

doFilter()方法可以執行0次或N

Filter也是一個單例模式的


四種過濾類型

REQUEST:直接訪問to.jsp時,Filter會進行攔截,除此之外,Filter不會進行攔截

          這種過濾類型是默認類型,可以在web.xml文件中不用配置

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<dispatcher>REQUEST</dispatcher>

</filter-mapping>

 

FORWARD:只有在轉發時,Filter會攔截,除此之外,Filter不會進行攔截

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<!-- 過濾類型 -->

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

</filter-mapping>

 

INCLUDE:只有在包含時,Filter會攔截,除此之外,Filter不會進行攔截

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<!-- 過濾類型 -->

<dispatcher>REQUEST</dispatcher>

<dispatcher>INCLUDE</dispatcher>

</filter-mapping>

 

ERROR:如有發生了錯誤信息,且在web.xml文件中聲明瞭,Filter會攔截,

除此之外,Filter不會進行攔截

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<!-- 過濾類型 -->

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

<dispatcher>ERROR</dispatcher>

</filter-mapping>

默認是REQUEST

如果多個Filter同時過濾同一種<url-pattern>的話,我們將這些Filter組成一個集合,

它們都在同一個鏈條上,這個鏈條就叫過濾器鏈。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章