1. 程式人生 > >Filter過濾器的理解及應用

Filter過濾器的理解及應用

     最近在學習JAVAWEB相關的內容,學習過servlet之後現在在學習過濾器,以下是我對filter過濾器的理解。

     顧名思義,過濾器就是一個用來過濾某些東西的機器。就好像我們生活中的漏斗一樣,將需要的留下並收集起來用作它途,將不需要的過濾下去再進行其他處理,比如可以將這些過濾掉的東西直接丟掉。它的中心作用就是‘過濾’!它有權選擇要過濾的東西和對過濾之後的東西如何進行處理。具體到java中的過濾器,它的具體功能就是對servlet容器呼叫servlet的過程進行攔截,包括請求和響應的過程都可以進行攔截。這個filter同servlet一樣,都是由servlet容器進行呼叫和執行的。

    那麼,我們怎樣在程式碼中建立一個滿足自己需求的過濾器呢?

    首先,我們需要建立一個自己的Filter實現類,它繼承了javax.servlet.Filter這個介面。且必須實現這個介面的三個方法。類似於servlet。

   1.init(FilterConfig)

       這個方法是在servlet容器初始化這個filter類例項之後就被呼叫,其中的FilterConfig引數可獲取在web.xml中配置的這個filter的所有的相關資訊。

   2.doFilter(ServletRequest,ServletResponse,FilterChain)

      這個方法在初始化之後被呼叫,使我們實現這個filter中真正實現我們業務程式碼的部分。

      為了便於我們獲取一些請求的引數和呼叫方法,我們可以將ServletRequest和ServletResponse封裝成HttpServletRequest和HttpServletResponse。

      第三個引數FilterChain是過濾器中和Servlet不一樣的地方,他代表著一個鏈條,這個鏈條將多個filter鏈在了一起。這個鏈條中的過濾器的過濾順序是按照在web.xml中配置mapping的順序來過濾的。而且,當一個過濾器起作用後,必須執行這個filterChain.doFilter方法釋放這個過濾器,他才會接著傳遞到下一個過濾器進行過濾。

   3.destroy()

      當這個filter例項被銷燬前進行呼叫。

   此外,filter和servlet除了filterchain這一點不同之外,servlet還有幾個封裝的實現類可以使用,如HttpServlet何GenericServlet,而filter卻沒有它具體的實現類和介面,需要我們自己封裝一個類似於HttpFilter的實現類供我們以後使用。

   建立好Filter的實現類之後,我們需要在web.xml檔案中配置以下我們的過濾器要過濾的內容。

   1.<filter>

         <filter-name>此處給過濾器起一個名字</filter-name>

         <filter-class>此處寫過濾器實現類的全類名</filter-class>

         <init-param>

            <param-name>此處填寫該過濾器初始化引數的名稱</param-name>

            <param-value>此處填寫該過濾器初始化引數的值</param-value>

         </init-param>

      </filter>

   2.<filter-mapping>

        <filter-name>此處用上邊起過的名字</filter-name>

       <url-mapping>此處寫我們需要過濾哪些URL請求</url-mapping>

       <dispacher>REQUEST,FORWORDMINCLUDE.ERROE</dispacher>

       <!--  上邊的dispacher節點代表這個過濾器對什麼型別的請求方式進行攔截,request表示直接訪問時過濾器起作用(預設),forword表示目標資源通過forword時起作用  -->

    </filter-mapping>

   建立好過濾器類之後,我們還可以學習一些filter類的典型應用。如瀏覽器不快取頁面,字元編碼的過濾器,檢測使用者是否登入的過濾器,許可權管理的過濾器等等。

   以上是我對過濾器的理解,歡迎諮詢和指導。

相關推薦

Filter過濾器理解應用

     最近在學習JAVAWEB相關的內容,學習過servlet之後現在在學習過濾器,以下是我對filter過濾器的理解。      顧名思義,過濾器就是一個用來過濾某些東西的機器。就好像我們生活中的漏斗一樣,將需要的留下並收集起來用作它途,將不需要的過濾下去再進行其他處

grep之正則表達式的理解應用

grep 正則表達式在本周學習中是個難點和重點,其中難免會有很多坑,也難免會不停的往裏跳,當跳的比較多了也就長記性了,通過很多次練習慢慢也就能發現其中暗藏玄機,成功的避開大坑選擇往小坑裏跳了,我相信在以後的學習中會不斷進步、勤加練習終究會跳出來的。好了,以下是本人對正則表達式的一點理解,如有錯誤之處請聯系我

css行高line-height的一些深入理解應用

out spa 行高 定義 blank 分享 tac 而且 -s 聲明:此文為轉載,點擊查看原文,原文發布日期為2009年,僅供大家參考,如有侵權24小時內刪除,聯系QQ:1522025433。 一、前言 前兩天在騰訊ISD團隊博客上看到一篇翻譯的文章“深入理解css 行高

淺談對xmpp的理解應用

mpp 通信 new xmpp times div log 傳輸數據 重新 參考原文鏈接 http://blog.sina.com.cn/s/blog_69f68f880102uyeg.html 一、xmpp是基於xml的協議。具有遵循標準,有安全性,使用TCP傳的xml的

理解應用 Oracle 12c 插拔數據庫

src session alt obj 結構 rtu head code oot 一、概述 1、Oracle 12c 可插拔數據庫體系結構 Oracle 12c 中引入了一個新功能就是Oracle Multitenant,這個功能可以在多租戶容器數據庫中,創建並維護許多個

狀態機理解應用

nsh 處理 .html 應用場景 logs color tps details pan 今天看nginx講解,看到在處理http請求行的時候用的是狀態機,一直淺顯的一位就是if else 或者switch,雖然實現是這種方式,但是內含的意義可不止這麽簡單,就再貼點別人的理

EIGRP路由協議的簡單理解應用

1.EIGRP 增強型內部閘道器路由協議 他是動態路由協議,是思科私有的路由協議(2013年已經公有化) 特點:     1)路由更新:閃速更新;觸發式更新;路由增量更新       2)協議更新採用組播地址來維持EIGRP的路由資訊傳遞;具有固定的組播地址來提供EIGRP通訊       

Oracel資料庫中檢視與同義詞的理解應用場景

轉載至: https://blog.csdn.net/u012411219/article/details/51321162 1. 資料庫物件之【檢視】簡單介紹    1.1 What:什麼叫檢視?          

職責鏈初步理解應用小demo

什麼是職責鏈 先看個需要用到職責的場景: if(請假天數 <= 1){ askForLeave(小組長); }else if(請假天數 <= 3 && 請假天數 > 1){ askForLeave(專案經理); }else if(請假天數 &

單例模式的理解應用

單例模式 單例模式定義:定義:確保某個類只有一個例項,而且自行例項化提供給外部使用。 單例模式有很中比較常用的有懶漢模式和餓漢模式。注:我在網上查說的比較多的模式,在專案中比較常看到的有懶漢模式。餓漢模式沒怎麼看過。 懶漢模式: public c

CAS演算法的理解應用

應用 眾所周知,Java中有許多執行緒安全類,比如執行緒安全的集合類。從Java5開始,在java.util.concurrent包下提供了大量支援高效併發訪問的集合介面和實現類。如:ConcurrentMap、ConcurrentLinkedQueue等執行緒安全集合。 引入問題 那麼問題

Canal( 增量資料訂閱與消費 )的理解應用

canal是阿里巴巴旗下的一款開源專案,純Java開發。基於資料庫增量日誌解析,提供增量資料訂閱&消費,目前主要支援了MySQL(也支援mariaDB)。 起源:早期,阿里巴巴B2B公司因為存在杭州和美國雙機房部署,存在跨機房同步的業務需求。不過早期的資料庫同步業務,主要是基於trigger的方式獲

line-height的一些深入理解應用

“行高”顧名思意指一行文字的高度。具體來說是指兩行文字間基線之間的距離。 下圖的紅色線即為基線。 一. line-height與line boxes高度 ss中起高度作用的應該就是height以及line-height了,如果一個標籤沒有定義heigh

數字貨幣開發專題(區塊鏈原理理解應用例項)

區塊鏈愛好者(QQ:53016353) 一、區塊鏈 X原理理解 1、位元資產的建立: 在區塊鏈 X系統中,位元資產的建立,必須有一方買入一方賣空才能發生。 買方b提交了買單,以0.01區塊鏈的單價買入BitUSD,如果系統內其他人覺得出價太低,這個買單不會成交。如果大叔a

Java事件機制理解應用

1.從總體看事件機制 其實事件機制是一種處理世界的方式和方法。傳統的順序程式設計總是按照流程來安排所做的工作,而事件機制的特點在於:等待,如果有事情發生則處理之。這樣的好處是順序程式設計在沒有事情做的時候也必須迴圈執行,做毫無效率的空的迴圈工作。而事件機制在沒有事情的時候則可

點陣圖(bitmap)的理解應用例項 布隆過濾

點陣圖是記憶體中連續的二進位制位,用於大量整型數的查詢和去重。 比如,給定10bit的記憶體空間,要將{5,3,4,7}插入其中。 則,先將第5位置1, 再將3,4,7 依次置1。 這樣,此時bitmap中儲存了哪些元素,就一目瞭然。 bitmap

ThreadLocal理解應用

     本次給大家介紹重要的工具ThreadLocal。講解內容如下,同時介紹什麼場景下發生記憶體洩漏,如何復現記憶體洩漏,如何正確使用它來避免記憶體洩漏。 ThreadLocal是什麼?有哪些用途? ThreadLocal如何使用 ThreadLocal原

乾貨,一文帶你超詳細瞭解 Filter 的原理應用

Filter 簡介 什麼是 filter 1) Filter(過濾器) 的基本功能是對 Servlet 容

布隆過濾器簡述應用

一、布隆過濾器 1、維基百科   布隆過濾器(Bloom Filter)是1970年由布隆提出的。   實際上是一個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索一個元素是否在一個集合中。   優點是不需要儲存 key,節省空間,空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的

Java過濾器Filter的原理配置_學習筆記

ava .cn -1 求和 pattern 資源 分享 java過濾器 服務器 Filter中文意思為過濾器。顧名思義,過濾器可在瀏覽器以及目標資源之間起到一個過濾的作用。例如:水凈化器,可以看成是生活中的一個過濾器,他可以將汙水中的雜質過濾,從而使進入的汙水變成凈水。 對