Servlet JSP 二重修煉:Filter過濾器

原網站:http://www.cnblogs.com/Alandre/p/4090491.html html

摘要: 原創出處: http://www.cnblogs.com/Alandre/ 泥沙磚瓦漿木匠 但願轉載,保留摘要,謝謝! java

真正的朋友就是,當你矇蔽了全部人的眼睛,也能看穿你真實的樣子和心底的痛楚。

前言

很久沒寫博客了。哈哈~寶刀未老呀,操起筆來準備11.11華華麗麗的來一篇。都說溫故知新,這句話絕對正確。按着人的記憶曲線,溫故是鞏固記憶力的好辦法。就像我仍是常常翻翻本身寫的博客。回頭來看看到的是新的東西。那就足夠了。 web

image

從右到左:人生境界也 api

過濾器

其實攔截器我在 posted @ 2014-03-20 12:45 寫過一篇:《⑧javaWeb之在例子中學習(過濾器Filter)》。會過頭來看,發現裏面講的不太細粒。可是其中兩個應用小例子是挺不錯了。若是喜歡看例子的能夠去看看。 安全

什麼是過濾器呢? ide

其實過濾器(Filter)和Servlet很類似,都是java的組件。即請求發送servlet以前,能夠用其截獲和處理請求,也能夠在serlvet結束工做以後,在響應發回以前處理響應。所以,和上篇同樣,過濾器filter是攔截請求,並對傳給請求資源的ServletRequest 或 ServletResponse 進行處理的一個對象。如圖:簡單的描述其工做原理 post

image

 

過濾器作的事情 學習

這是咱們最但願作看到的事情,其實Filter能夠當成一個插件組件。它的做用於request和response之間。 網站

請求過濾器的做用: spa

  • 完成安全檢查
  • 從新格式化請求首部或者體
  • 創建請求審計和日誌

 

響應過濾器的做用:

  • 壓縮相應流
  • 追加或者修改流
  • 建立一個徹底不一樣的響應

 

案例代碼解釋

Servlet API中提供了一個Filter接口,開發應用時,若是編寫的Java類實現了這個接口,則把這個java類稱之爲過濾器Filter。Filter的實現類實現了一個J2EE的過濾器,過濾器的api容許訪問ServletCOntext,一樣能夠連接到另外一個Filter。

Filter相似於Servlet一個樣,有一個生命週期。裏面有:init(), destroy(),還有個核心方法:doFilter()。

  • init(FilterConfig):這是Filter的初始化方法,Servlet容器建立Filter實例後將調用這個方法。在這個方法中能夠讀取web.xml文件中Filter的初始化參數
  • doFilter(ServletRequest,ServletResponse,FilterChain): 這個方法完成實際的過濾操做,當客戶請求訪問於Filter關聯的URL時,Servlet容器將先調用Filter的doFilter方法。FilterChain參數用於訪問後續Filters
  • destroy():  Servlet容器在銷燬Filter實例前調用該方法,這個方法中能夠釋放Filter佔用的資源

過濾器執行機制圖:

 

此咱們實現這個接口:

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的設計

從Filter執行機制圖,咱們能夠體會到其設計很像一個東西---」棧「。能夠從我書中摘錄的一張圖片體會:Filter3→Filter7→SerlvetA→Filter7→Filter3

image

 

後記

重讀Filter的積累。

如以上文章或連接對你有幫助的話,別忘了在文章按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章

下面是pdf,要下載的請打開(http://files.cnblogs.com/Alandre/fiklter.pdf) 

相關文章
相關標籤/搜索