JavaEE之過濾器-Filter
阿新 • • 發佈:2019-01-06
過濾器
過濾器簡介
1)過濾器其實就是一個介面,Filter, javax.servet.Filter2)過濾器就是一個物件,可以在請求一個資源(靜態或動態資源),或響應一個資源,或請求和響應一個資源的時候,執行過濾任務!!!!
3)過濾器如何被執行?
過濾器也需要交給tomcat伺服器執行!!!!
Servlet的三大元件:1)都需要交給web伺服器執行 2)在web.xml檔案中配置
Servlet介面
Filter介面
Listener介面
4)過濾器的生命週期
構造方法: 在web應用載入時建立過濾器物件。只執行一次。證明過濾器在web伺服器中是單例項的
init方法: 在建立完過濾器物件之後被呼叫。只執行一次
doFilter方法: 執行過濾任務方法。執行多次。
destroy方法: web伺服器停止或者web應用重新載入,銷燬過濾器物件。
5)過濾器編寫步驟:
5.1 編寫一個java類,實現Filter介面,並實現其中的所有方法
5.1 在web.xml檔案中配置Filter
<!-- 過濾器配置 --> <filter> <!-- 內部名稱 --> <filter-name>HelloFilter</filter-name> <!-- 類全名:包+簡單類名 --> <filter-class>gz.itcast.a_hello.HelloFilter</filter-class> </filter> <!-- 過濾器對映配置 --> <filter-mapping> <!-- 內部名稱,和上面的名稱保持一致! --> <filter-name>HelloFilter</filter-name> <!-- 需要攔截的路徑 --> <url-pattern>/hello</url-pattern> </filter-mapping>
過濾器的對映路徑
過濾器中的url-pattern: 表示的這個過濾器需要攔截的目標資源路徑(可以servlet路徑,也可以是靜態資源名稱)Servlet中的url-pattern: 表示訪問這個servlet時的路徑
url-pattern 瀏覽器訪問目標資源的路徑
精確過濾 /hello http://localhost:8080/day21/hello
/itcast/hello http://localhost:8080/day21/itcast/hello
模糊過濾
/itcast/* http://localhost:8080/day21/itcast/任意路徑
*.字尾名 http://localhost:8080/day21/任意路徑.字尾名
注意:
1)url-pattern要麼以斜槓開頭,要麼以*開頭 例如: hello
2)不能同時使用兩個模糊過濾。例如 /*.do 是非法的
3)如果存在多個需要被過濾的資源,可以寫多個url-pattern去過濾。
4)如果是動態資源servlet,可以使用servlet的訪問名稱,也可以使用內部名稱
<!-- 使用servlet的內部名稱 -->
<servlet-name>HelloServlet</servlet-name>
5)過濾型別:
<!-- 過濾型別:宣告哪種請求才可以被攔截(過濾) -->
<dispatcher>REQUEST</dispatcher><!-- 預設:來自於直接訪問的請求才可以被攔截 -->
<dispatcher>FORWARD</dispatcher><!-- 來自於轉發的請求才可以被攔截 -->
<dispatcher>INCLUDE</dispatcher><!-- 來自於包含的請求才可以被攔截 -->
<dispatcher>ERROR</dispatcher><!-- 來自於錯誤的請求才可以被攔截 -->
FilterConfig物件
FilterConfig物件,過濾器配置物件,用於載入過濾器的引數配置過濾器引數使用:
1)在web.xml檔案中配置
<!-- 過濾器配置 -->
<filter>
<!-- 內部名稱 -->
<filter-name>HelloFilter</filter-name>
<!-- 類全名:包+簡單類名 -->
<filter-class>gz.itcast.a_hello.HelloFilter</filter-class>
<init-param>
<param-name>AAA</param-name>
<param-value>AAA'value</param-value>
</init-param>
<init-param>
<param-name>BBB</param-name>
<param-value>BBB'value</param-value>
</init-param>
</filter>
2)在過濾器器中使用
/**
* 2)init初始化方法
*/
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("2)Filter生命週期-init方法");
/**
* 通過FilterConfig物件得到引數配置資訊
*/
//得到一個引數
System.out.println(filterConfig.getInitParameter("AAA"));
Enumeration<String> enums = filterConfig.getInitParameterNames();
//遍歷所有引數
while(enums.hasMoreElements()){
String paramName = enums.nextElement();
String paramValue = filterConfig.getInitParameter(paramName);
System.out.println(paramName+"="+paramValue);
}
}