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"));
}