filter过滤器_JavaWeb之 Filter(过滤器)
FIlter作用
過濾器JavaWeb三大組件之一,它與Servlet很相似!不它過濾器是用來攔截請求的,而不是處理請求的。
當用戶請求某個Servlet時,會先執行部署在這個請求上的Filter,如果Filter“放行”,那么會繼承執行用戶請求的Servlet;如果Filter不“放行”,那么就不會執行用戶請求的Servlet。
其實可以這樣理解,當用戶請求某個Servlet時,Tomcat會去執行注冊在這個請求上的Filter,然后是否“放行”由Filter來決定。可以理解為,Filter來決定是否調用Servlet!當執行完成Servlet的代碼后,還會執行Filter后面的代碼。
FIlter實現步驟
1.創建AFilter類實現javax.servlet.Filter接口
2.添加@WebFilter("/*")注解或者添加web.xml配置
<3.已經完成了
4.@WebFilter參數說明
編寫簡單一個Filter
packageFIlter說明
Filter是單例的!void init(FilterConfig)創建之后,馬上執行;Filter會在服務器啟動時就創建!
FilterConfig-->與ServletConfig相似
- 獲取初始化參數:getInitParameter()
- 獲取過濾器名稱:getFilterName()
- 獲取appliction:getServletContext()
void destory()
銷毀之前執行!在服務器關閉時銷毀void doFilter(ServletRequest,ServletResponse,FilterChain)
每次過濾時都會執行
FilterChain
- doFilter(ServletRequest, ServletResponse):放行!
執行目標資源就相當于調用了目標Servlet的service()方法!,或是執行下一個過濾器!如果沒有下一個過濾器那么執行的是目標資源,如果有,那么就執行下一個過濾器!
多個過濾器執行順序
1.<filter-mapping>的配置順序決定了過濾器的執行順序!
2.過濾時遵守先進先出
過濾器的N種攔截方式
<應用場景
執行目標資源之前做預處理工作,例如設置編碼,這種試通常都會放行,只是在目標資源執行之前做一些準備工作
通過條件判斷是否放行,例如校驗當前用戶是否已經登錄,或者用戶IP是否已經被禁用;
在目標資源執行后,做一些后續的特殊處理工作,例如把目標資源輸出的數據進行處理;
設置目標資源
/:所有資源/xx/xx/ :xx/xx/下的所有資源/aaa/bbb/ccc/Servlet:具體AServlet
案例
案例一【分ip統計網站的訪問次數】
分析
統計工作需要在所有資源之前都執行,那么就可以放到Filter中了。
我們這個過濾器不做攔截操作!因為我們只是用來做統計的。
用什么東西來裝載統計的數據。Map<String,Integer>
整個網站只需要一個Map即可!
Map什么時候創建(使用ServletContextListener,在服務器啟動時完成創建,并只在到ServletContext中),Map保存到哪里!(Map保存到ServletContext中!!!)
Map需要在Filter中用來保存數據
Map需要在頁面使用,打印Map中的數據
代碼實現
Listener
packageFilter
packagejsp
<%效果
image.png
案例二【粗粒度權限過濾】
只有文字描述步驟
游客、會員、管理員三個粒度
1.創建一個Fileter,過濾會員下的資源訪問,這是保安1號 ,doFilter里檢查session中權限標記,第一道檢查工序,不是管理員=> 放行,第二道檢查工序,不是會員=> 打回到登錄/注冊頁面,如果是會員就放行!
2.創建一個Fileter,過濾管理員下的資源訪問,這是保安2號 ,doFilter里檢查session中權限標記,查看是不是管理員,不是管理員=>打回到登錄/注冊頁面,如果是管理員就放行!
案例三【解決全站字符亂碼(POST和GET中文編碼問題)】
工具類
package只要配置了這個過濾器 即可使用
<案例四【頁面靜態化 改日補充】
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的filter过滤器_JavaWeb之 Filter(过滤器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上传文件的php代码,PHP实现大文件上
- 下一篇: 线程中如何使用对象_在 Flink 算子