Java三大器之過濾器(Filter)的工作原理和代碼示範__Java

來源:互聯網
上載者:User
一、Filter簡介

  Filter也稱之為過濾器,它是Servlet技術中最激動人心的技術之一,WEB開發人員通過Filter技術,對web伺服器管理的所有web資源:例如Jsp,
Servlet, 靜態圖片檔案或靜態html檔案等進行攔截,從而實現一些特殊的功能。例如實現URL層級的許可權存取控制、過濾禁用語、壓縮響應資訊等
一些進階功能。
  Servlet API中提供了一個Filter介面,開發web應用時,如果編寫的Java類實現了這個介面,則把這個java類稱之為過濾器Filter。通過Filter
技術,開發人員可以實現使用者在訪問某個目標資源之前,對訪問的請求和響應進行攔截,Filter介面原始碼:
[java]  view plain  copy   public abstract interface Filter{       public abstract void init(FilterConfig paramFilterConfig) throws ServletException;       public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain            paramFilterChain) throws IOException, ServletException;       public abstract void destroy();   }  

二、Filter是如何?攔截的。(Filter的工作原理)

  Filter介面中有一個doFilter方法,當我們編寫好Filter,並配置對哪個web資源進行攔截後,WEB伺服器每次在調用web資源的service方法之前,
都會先調用一下filter的doFilter方法,因此,在該方法內編寫代碼可達到如下目的:
    調用目標資源之前,讓一段代碼執行。
    是否調用目標資源(即是否讓使用者訪問web資源)。
    調用目標資源之後,讓一段代碼執行。
  web伺服器在調用doFilter方法時,會傳遞一個filterChain對象進來,filterChain對象是filter介面中最重要的一個對象,它也提供了一個
doFilter方法,開發人員可以根據需求決定是否調用此方法,調用該方法,則web伺服器就會調用web資源的service方法,即web資源就會被訪問,
否則web資源不會被訪問。

三、Filter開發流程

3.1、Filter開發步驟
Filter開發分為2步:
 * 編寫java類實現Filter介面,並實現其doFilter方法。
 * 在web.xml 檔案中使用<filter>和<filter-mapping>元素對編寫的filter類進行註冊,並設定它所能攔截的資源。

過濾器範例:

[java]  view plain  copy   import java.io.IOException;   import javax.servlet.Filter;   import javax.servlet.FilterChain;   import javax.servlet.FilterConfig;   import javax.servlet.ServletException;   import javax.servlet.ServletRequest;   import javax.servlet.ServletResponse;   /**   * @author yangcq   * @description 過濾器Filter的工作原理   */   public class FilterTest implements Filter{          public void destroy() {           System.out.println("----Filter銷毀----");       }          public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {           // 對request、response進行一些預先處理           request.setCharacterEncoding("UTF-8");           response.setCharacterEncoding("UTF-8");  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.