1. 程式人生 > >JavaWeb 核心技術之過濾器Filter

JavaWeb 核心技術之過濾器Filter

一、過濾器Filter

1.filter的簡介

filter是對客戶端訪問資源的過濾,符合條件放行,不符合條件不放行,並且可以對目標資源訪問前後進行邏輯處理

2.快速入門

步驟:

1)編寫一個過濾器類實現Filter介面

package com.ma.web.filter;



import java.io.IOException;



@javax.servlet.annotation.WebFilter(filterName = "QuickFilter")

public class QuickFilter implements javax.servlet.Filter {

public void destroy() {

}



public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {



System.out.println("Quick running...");



//放行請求

chain.doFilter(req, resp);

}



public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {



}



}

2)實現介面尚未實現的方法(著重是doFilter方法)

public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {



System.out.println("Quick running...");



//放行請求

chain.doFilter(req, resp);

}

3)在web.xml中進行配置(主要是配置對哪些資源進行過濾)

<filter>

<filter-name>QuickFilter</filter-name>

<filter-class>com.ma.web.filter.QuickFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>QuickFilter</filter-name>

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

</filter-mapping>

圖解

3.Filter的API詳解

1)filter生命週期及其與生命週期相關的方法

filter介面有三個方法,並且這三個方法都是與Filter的生命相關的方法。

init(FilterConfig filterConfig):代表filter物件初始化方法,物件建立時執行

//Filter建立的時候呼叫init方法

public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {

//1.獲取web.xml的filter的名稱

System.out.println(config.getFilterName());

//2.獲取filter的初始化引數

System.out.println(config.getInitParameter("aaa"));

//3.獲取ServletContext

System.out.println(config.getServletContext());

System.out.println("init...");

}

doFilter(ServletRequest request, ServletRespnse respnse, FilterCha cha):代表filter執行的核心方法,如果某資源已經配置到這個filter進行過濾的話,那麼每次訪問這個資源都會執行doFilter()方法

/**

*

* @param req 內部封裝的是客戶端http請求

* @param resp 代表響應

* @param chain 過濾器鏈物件

* @throws javax.servlet.ServletException

* @throws IOException

*/

//doFilter過濾器的核心方法

public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {



System.out.println("Quick01 running...");



//放行請求

chain.doFilter(req, resp);

}

destory():代表是filter銷燬方法,當filter銷燬時執行該方法

//Filter物件銷燬的時候執行destiny方法

public void destroy() {

System.out.println("destory...");

}



3.dispatcher:訪問的方式

REQUEST:預設值,代表直接訪問某個資源時執行filter

FORWARD:轉發時才執行filter

INCLUDE:包含資源時執行filter

ERROR:發生錯誤是,進行跳轉時候執行filter

4.總結filter作用:

1)公共程式碼的提取

2)可以對request和reponse中的方法進行增強(裝飾者模式動態代理

3)進行許可權管理

二、自動登入

三、全域性編碼修改