原網站:http://www.cnblogs.com/Alandre/p/4090491.html html
摘要: 原創出處: http://www.cnblogs.com/Alandre/ 泥沙磚瓦漿木匠 但願轉載,保留摘要,謝謝! java
很久沒寫博客了。哈哈~寶刀未老呀,操起筆來準備11.11華華麗麗的來一篇。都說溫故知新,這句話絕對正確。按着人的記憶曲線,溫故是鞏固記憶力的好辦法。就像我仍是常常翻翻本身寫的博客。回頭來看看到的是新的東西。那就足夠了。 web
從右到左:人生境界也 api
其實攔截器我在 posted @ 2014-03-20 12:45 寫過一篇:《⑧javaWeb之在例子中學習(過濾器Filter)》。會過頭來看,發現裏面講的不太細粒。可是其中兩個應用小例子是挺不錯了。若是喜歡看例子的能夠去看看。 安全
什麼是過濾器呢? ide
其實過濾器(Filter)和Servlet很類似,都是java的組件。即請求發送servlet以前,能夠用其截獲和處理請求,也能夠在serlvet結束工做以後,在響應發回以前處理響應。所以,和上篇同樣,過濾器filter是攔截請求,並對傳給請求資源的ServletRequest 或 ServletResponse 進行處理的一個對象。如圖:簡單的描述其工做原理 post
過濾器作的事情 學習
這是咱們最但願作看到的事情,其實Filter能夠當成一個插件組件。它的做用於request和response之間。 網站
請求過濾器的做用: spa
響應過濾器的做用:
Servlet API中提供了一個Filter接口,開發應用時,若是編寫的Java類實現了這個接口,則把這個java類稱之爲過濾器Filter。Filter的實現類實現了一個J2EE的過濾器,過濾器的api容許訪問ServletCOntext,一樣能夠連接到另外一個Filter。
Filter相似於Servlet一個樣,有一個生命週期。裏面有:init(), destroy(),還有個核心方法:doFilter()。
過濾器執行機制圖:
此咱們實現這個接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class DemoFilterimplements Filter
{
@Override
public void init(FilterConfig filterConfig)throws ServletException
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException
{
chain.doFilter(request, response);
}
@Override
public void destroy()
{
//完成清理工做
}
}
|
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
你們主要看看這個參數:ServletRequest /ServletResponse 。這個方法不取HTTP請求和相應對象作參數,而只是常規的ServletRequest /ServletResponse 對象。這裏是對通用性的設計,過濾器的設計的要通用,若是過濾器用於一個非web應用,因此實現非Http接口。但不用擔憂的是,ServletResponse 是HttpServletResponse的超類。
從Filter執行機制圖,咱們能夠體會到其設計很像一個東西---」棧「。能夠從我書中摘錄的一張圖片體會:Filter3→Filter7→SerlvetA→Filter7→Filter3
重讀Filter的積累。
如以上文章或連接對你有幫助的話,別忘了在文章按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章
下面是pdf,要下載的請打開(http://files.cnblogs.com/Alandre/fiklter.pdf)