過濾器(Filter)你知多少

過濾器

過濾器實際上就是對web資源進行的攔截,filter是Servlet的規範它是處於客戶端與服務器資源文件之間的一道過濾網 。通俗的來講,就是你想要訪問我的服務器,就需要首先通過過濾器的層層檢查,然後你的請求才會被servlet處理。
在這裏插入圖片描述
過濾器是配置在web.xml文件中的

<!--在web.xml裏面設置攔截器-->
 
<filter>          
  <filter-name>XxxFilter</filter-name>         
  <filter-class>XxxFilter類的全限定名</filter-class>
  <init-param>
        <param-name>encoding</param-name>
        <param-value>GB2312</param-value>
    </init-param>
</filter>   

<filter>
  <filter-name>XxxFilter1</filter-name>         
  <filter-class>XxxFilter1類的全限定名</filter-class>  
</filter>
 
 <filter-mapping>          
	<filter-name>XxxFilter</filter-name>          
	<!--表示:當前Filter只對哪些資源做過濾/攔截操作,只對hello.jsp做攔截  -->     
	<url-pattern>/hello.jsp</url-pattern>      
</filter-mapping>

 <filter-mapping>          
	<filter-name>XxxFilter1</filter-name>          
	<!--表示:當前Filter只對哪些資源做過濾/攔截操作,只對hello1.jsp做攔截  -->     
	<url-pattern>/hello1.jsp</url-pattern>      
</filter-mapping>

多個攔截器的執行順序與web.xml文件中的filter-mapping的順序有關。

詳解

Filter三個生命週期方法

    @Override
    // Filter的初始化方法,在Servlet啓動時調用
    //FilterConfig爲Filter的配置和運行環境
    public void init(FilterConfig filterConfig) throws ServletException {
	
    }

    @Override
    // Filter進行攔截請求時,Servlet將調用doFilter方法
    //request 和response 分別對應本次訪問請求的請求體和響應體,chain則表示Filter鏈的對象
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }

    @Override
    // 在Servlet對象被銷燬時調用,只能執行一次,釋放資源
    public void destroy() {

    }
Filter鏈

在一個web應用中,可以定義很多歌Filter攔截器對象,這些Filter組成一個Filter鏈(過濾器鏈)。
多個Filter(過濾器)的攔截順序與他們在Web.xml中映射(filter-mapping)順序一致。一個Filter執行完之後,會調用FilterChain.doFilter激活下一個Filter的doFilter方法。最後一個Filter.foFilter方法調用之後將會激活目標Servlet的service方法

FilterConfig接口

Filterconfig裏面封裝了Filter的配置參數信息。
FilterConfig接口定義的各個方法:

public interface FilterConfig {
	//返回<filter-name>元素設置的值
    String getFilterName();
	//返回FilterConfig對象中所包裝的ServletContext對象的引用
    ServletContext getServletContext();
	//返回在web.xml文件中Filter所設置的某個名稱的初始化的參數值
    String getInitParameter(String var1);
	//返回一個Enumeration集合對象
    Enumeration<String> getInitParameterNames();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章