Servlet 過濾器( Filter )

Servlet 過濾器( Filter )

  • 原理圖:
    在這裏插入圖片描述

  • 過濾器的使用場景

    • 登錄權限驗證、資源訪問權限控制、敏感詞彙過濾、字符編碼轉換
  • 過濾器的優勢

    • 便於代碼重用,不必每個servlet中還要進行相應的操作
  • 配置方式

    • web配置方式

      • <!--過濾器的xml配置  -->
        <filter>
        	<!--名稱-->
        	<filter-name>sf</filter-name>
        	<!--過濾器類全稱-->
        	<filter-class>com.qf.web.filter.SecondFilter</filter-class>
        </filter>
        <!--映射路徑配置-->
        <filter-mapping>
            <!--名稱-->
            <filter-name>sf</filter-name>
            <!--過濾的url匹配規則和Servlet的一模一樣-->
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
    • 註解方式

      • 在過濾的類中加上註解 @WebFilter(“/*”)
      • 過濾的路徑=訪問的路徑過程中含過濾路徑(格式),即執行對應的過濾器類

過濾器( Filter )類的運行原理及運行順序

  • Filter代碼
  • Filter爲 接口,寫一個類去實現它
@WebFilter("/*")
public class demo implements Filter {

	//銷燬--執行一次
	public void destroy() {
		// TODO Auto-generated method stub
	}
	//進行過濾時執行的方法
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// 過濾前
	chain.doFilter(request, response);//過濾條件通過後,進入下一個過濾器(有過濾器)/到達目標請求
		//過濾後
	}
	//初始化--執行一次
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}
  • 圖示
    在這裏插入圖片描述

Filter鏈中–Filter運行順序

  • 在一個web應用中,可以開發編寫多個Filter,這些Filter組合起來稱之爲一個Filter鏈
  • 執行順序
Filter僅以web.xml 方式配置 按照web.xml中Filter定義的順序執行
Filter僅以註解 方式配置 按照Filter類文件的類名,按字典序執行
Filter以web.xml和註解方式配置 web.xml中的內容優先執行,其次是註解
(同種配置方式,按上述規則執行)

Filter 初始化

  • 註解方式

    • @WebFilter(value="/*",initParams= {@WebInitParam(name=“version”, value=“1.0”)})
  • web.xml方式

    <!--過濾器的xml配置  -->
    <filter>
        <filter-name>myfilter</filter-name>
        <filter-class>com.qf.web.filter.SecondFilter</filter-class>
    <!--過濾器的初始化參數  -->
        <init-param>
          <param-name>version</param-name>
          <param-value>1.0</param-value>
        </init-param>
    </filter>
    <filter-mapping>
          <filter-name>myfilter</filter-name>
          <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • Filter初始化調用

public void init(FilterConfigfConfig) throws ServletException {
    // TODO Auto-generated method stub
    System.out.println("init......初始化");
    System.out.println("初始化參數:版本號:"+fConfig.getInitParameter("version"));
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章