JavaWeb之过滤器(Filter)
一、過濾器簡介:
過濾器(Filter)是JavaWeb中最常用到的技術,常用于URL的權限訪問控制,編碼轉換,錯誤頁面跳轉,攔截過濾圖片,html文件,指定文字等功能。
二、過濾器如何工作:
大致過程:在客戶端發送一個請求時,即HttpServletRequest或HttpServletResponse到達Servlet之前,Filter會將其攔截下來,并對其進行數據檢查和相應的過濾后,再進行放行或相應的跳轉,然后再生成響應返回時,Filter再次對服務器的響應進行最后處理并到達視圖層,總的來講: 請求 ——> 過濾 ——> 響應 ——> 過濾 ——> 顯示。?在一個web應用中,可以開發編寫多個Filter,這些Filter組合起來稱之為一個Filter鏈。web服務器根據Filter在web.xml文件中的注冊順序,決定先調用哪個Filter,如果使用的是注解方式來注冊,那么執行順序應該是過濾器的文件名的首字母的順序。當第一個Filter的doFilter方法被調用時,web服務器會創建一個代表Filter鏈的FilterChain對象傳遞給該方法。在doFilter方法中,開發人員如果調用了FilterChain對象的doFilter方法,則web服務器會檢查FilterChain對象中是否還有filter,如果有,則調用第2個filter,如果沒有,則調用目標資源。
生命周期:Filter接口實現類中要實現三個方法:init方法,doFilter方法,destroy方法。
(1) init(FilterConfig):
初始化接口,在web服務器啟動時Filter初始化被調用,它與Servlet的init方法的作用是一樣的,FilterConfig能得到容器的初始化參數及相應的一些數據。
1 String getFilterName();//得到filter的名稱。 2 String getInitParameter(String name);//返回在部署描述中指定名稱的初始化參數的值。如果不存在返回null. 3 Enumeration getInitParameterNames();//返回過濾器的所有初始化參數的名字的枚舉集合。 4 public ServletContext getServletContext();//返回Servlet上下文對象的引用。(2) doFilter(ServletRequest, ServletResponse, FilterChain):
每個用戶的請求進來時這個方法都會被調用,這個方法會在Servlet的service方法之前被調用,是過濾器的主體。FilterChain代表當前的整個請求鏈,通過調用FilterChain.doFilter可以將請求繼續傳遞下去,如何攔截這個請求,只需不調用該方法,那么這個請求就直接返回。所以Filter是一種責任鏈設計模式。doFilter可以做到:調用目標資源之前,讓一段代碼執行。 是否調用目標資源(即是否讓用戶訪問web資源)。web服務器在調用doFilter方法時,會傳遞一個filterChain對象進來,filterChain對象是filter接口中最重要的一個對象,它也提供了一個doFilter方法,開發人員可以根據需求決定是否調用此方法,調用該方法,則web服務器就會調用web資源的service方法,即web資源就會被訪問,否則web資源不會被訪問。
(3) destroy
Filter對象創建后會駐留在內存,當web應用移除或服務器停止時才銷毀,當Filter對象被銷毀時,這個方法被調用。值得注意的時,根據上面所提到的響應時還會進行一次過濾,所以當Web容器調用這個方法之后,容器還會再調用一次doFilter方法。
三、簡單實例:
在這里我們用的是Servlet3.0新增的注解方式來代替以前使用的xml配置:
?
?
?
一些知識來源:https://www.cnblogs.com/coderland/p/5902878.html
轉載于:https://www.cnblogs.com/chenloveslife/p/8946260.html
總結
以上是生活随笔為你收集整理的JavaWeb之过滤器(Filter)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3.5+selenium操作
- 下一篇: Actuator 端点监控