008_过滤器
一. 過濾器
1. 過濾器其實就是對客戶端(瀏覽器)發出來的請求進行過濾。客戶端(瀏覽器)發出請求, 然后服務器派servlet處理, 在中間可以添加過濾器, 其實過濾器起到的是攔截的作用。
2. 過濾器作用
2.1.?對一些敏感詞匯進行過濾
2.2.?統一設置編碼
2.3.?自動登錄
3. 過濾器的生命周期例子
3.1. 新建一個名叫FilterLifeCycle的Web項目
3.2. 定義過濾器, 需要實現Servlet的Filter接口
package com.lywgames.filterlifecycle;import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;/*** 自定義過濾器需要實現Servlet的Filter接口*/ public class MyFilter implements Filter {@Overridepublic void init(FilterConfig config) throws ServletException {System.out.println("在服務器加載項目的時候創建, 初始化。");}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {System.out.println("進入到過濾器了, 可以進行過濾操作了。");// 本過濾器放行, 你可以去下一個過濾器或者Servlet了chain.doFilter(req, res);}@Overridepublic void destroy() {System.out.println("服務器停止或者移除項目的時候的銷毀。");} }3.3. 新建一個index.html
<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>過濾器生命周期</title></head><body><h1>過濾器生命周期</h1></body> </html>3.4. 在web.xml里注冊過濾器和過濾器映射
3.5. 過濾器放行, 請求才能到達下一個過濾器、Servlet或者資源文件。過濾器放行方法是在doFilter方法里調用chain.doFilter進行放行。
3.6. 運行項目, 過濾器被初始化了, 也進入了過濾器操作方法, 如果我們在過濾器操作方法中放行的話, 才會進入主頁; 如果不方行, 不會到達主頁
3.7. 正常關閉服務器, 銷毀了過濾器
4. 過濾器的生命周期
4.1. 在服務器加載項目的時候創建, 初始化。
4.2. 服務器停止或者移除項目的時候的銷毀。
5. 過濾器的執行順序
5.1. 單個過濾器的執行順序: 客戶端(瀏覽器)發出請求, 經過過濾器, 如果過濾器放行, 才能到達Servlet或者資源文件。
5.2. 多個過濾器的執行順序: 如果有多個過濾器, 那么他們會按照過濾器注冊的映射順序來排隊。請求經過一系列過濾器, 到達Servlet或者資源文件。
6. 過濾器的init方法的參數FilterConfig, 可以用于獲取filter在注冊的時候的名字以及初始化參數。
7. dispatcher設置
7.1. REQUEST: 只要是請求過來, 都攔截, 默認就是REQUEST。
7.2. FORWARD: 只要是轉發都攔截。
7.3. ERROR:?頁面出錯發生跳轉。?
7.4. INCLUDE:?包含頁面的時候就攔截。
8. 過濾器鏈例子
8.1. 新建一個名叫FilterLifeCycle的Web項目
8.2. 新建一個MyFilter1.java
package com.lywgames.filterlifecycle;import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;public class MyFilter1 implements Filter {@Overridepublic void init(FilterConfig config) throws ServletException {String filterName = config.getFilterName();String param1 = config.getInitParameter("param1");System.out.println("filterName = " + filterName);System.out.println("param1 = " + param1);}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {System.out.println("請求進入到過濾器1");chain.doFilter(req, res);System.out.println("請求經過Servlet處理后, 返回到過濾器1");}@Overridepublic void destroy() {System.out.println("銷毀過濾器1");} }8.3. 新建一個MyFilter2.java
package com.lywgames.filterlifecycle;import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;public class MyFilter2 implements Filter {@Overridepublic void init(FilterConfig config) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {System.out.println("請求進入到過濾器2");chain.doFilter(req, res);System.out.println("請求經過Servlet處理后, 返回到過濾器2");}@Overridepublic void destroy() {System.out.println("銷毀過濾器2");} }8.4. 新建一個MyFilter3.java
package com.lywgames.filterlifecycle;import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;public class MyFilter3 implements Filter {@Overridepublic void init(FilterConfig config) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {System.out.println("請求進入到過濾器3");chain.doFilter(req, res);System.out.println("請求經過Servlet處理后, 返回到過濾器3");}@Overridepublic void destroy() {System.out.println("銷毀過濾器3");} }8.5. 新建一個index.html
<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>主頁面</title></head><body><h1>主頁面</h1></body> </html>8.6. 在web.xml里注冊過濾器和過濾器映射, 過濾器初始化參數
8.7. 運行項目
8.8. 關閉服務器, 銷毀過濾器
總結
- 上一篇: 007_监听器
- 下一篇: 009_BeanUtils的使用