JSP Filter的應用方法

來源:互聯網
上載者:User

Servlet有一個很有意思也很有用的功能,就是Filter。 所謂Filter,就是在使用者請求到達 Servlet 之前、或者 Servlet 執行之後, 執行的一段小程式,這段程式可以對使用者請求做預先處理, 或者對Servlet返回的結果進行一些公用處理。
Filter可以在請求到達 Servlet 之前執行, 甚至即使請求一個靜態頁面或圖片等,Filter也會被優先執行。 這樣我們可以通過Filter對應用程式內的所有對象(包括Java程式和靜態內容)進行預先處理。 (這個功能恐怕PHP程式就無法做到了。)

Filter通常可用於以下幾種情況:
•認證
•記錄訪問日誌
•加密解密
•字元編碼轉換
•資料壓縮

如上面最常用的“認證”,可以在Filter中書寫認證代碼, 這樣不僅省卻了在Servlet中認證的麻煩,而且還能控制網站中靜態內容的訪問。
Filter是個介面,位於 javax.servlet.Filter。它與其他介面的關係如下:

我們在書寫自己的Filter時,只需寫一個類實現 Filter 介面即可。
實現Filter介面需要實現以下幾個方法:

複製代碼 代碼如下:void init(FilterConfig filterConfig) throws ServletException

Filter的初始化方法。複製代碼 代碼如下:void destroy()

Filter結束之前執行的方法。複製代碼 代碼如下:void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

Filter的執行內容。參數request和response分別為輸入和輸出參數,而chain則為Filter鏈對象。
所謂FilterChain,一個應用程式內的Filter可以有多個,它們像鏈子一樣串在一起, 其中的某個Filter執行之後,可以調用chain.doFilter(request, response)將執行權轉給下一個Filter, 直到所有的Filter都執行完畢。
這次的樣本程式我們修改了上一節的登入程式, 為它增加了一個下載連結(詳見SessionTest.java)。 這個下載連結指向 img/sample.jpg。 我們希望能通過一個Filter,在使用者試圖下載 img/sample.jpg 時驗證使用者身份, 如果驗證失敗,則禁止使用者下載,並跳轉到登入頁面。
建立Filter時可惜不能像Servlet那樣,直接從右鍵菜單中選擇建立, 而只能先寫好原始碼然後手工添加到web.xml中。 如,在建立類時注意要實現javax.servlet.Filter介面。

寫完代碼之後,開啟web.xml檔案,手工添加Filter。與Servlet類似,你需要添加 和 兩個標記。這裡我們要對 /img/ 下的所有檔案進行登入驗證, 因此的 url-pattern 處我們填寫了 /img/* 。

最後執行,訪問 /LearnJSP/img/sample.jpg ,就會跳轉到登入頁面。 登入之後再次訪問上面的連結,才能看到正確的圖片。

樣本下載:servlet-filter_jb51net.zip

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.