web.xml過濾器 - filter


web.xml 過濾器 — 函數回調,指責鏈模式

1、 Filter作用 
當客戶端發出Web資源的請求時,Web服務器根據應用程序配置文件web.xml設置的過濾規則,能夠在一個request到達servlet之前預處理request,也可以在離開servlet時處理response。 —— filter實際是一個servlet chaining(servlet 鏈)

  • 在servlet被調用之前截獲;

  • 在servlet被調用之前檢查servlet request;

  • 根據需要修改request頭和request數據;

  • 在servlet被調用之后截獲.

  • 根據需要修改response頭和response數據;

2、 過濾器生命周期的四個階段:

  1. 實例化:Web容器在部署Web應用程序時對所有過濾器進行實例化。Web容器回調它的無參構造方法。

  2. 初始化:實例化完成之后,馬上進行初始化工作。Web容器回調init()方法。

  3. 過濾:請求路徑匹配過濾器的URL映射時。Web容器回調doFilter()方法——主要的工作方法。

  4. 銷毀: Web容器在卸載Web應用程序前,Web容器回調destroy()方法。

3、 過濾器接口介紹

  • init(用來初始化)

  • dofilter(用來執行具體的操作) 
    此方法是由Servlet容器提供給開發者的,用於對資源請求過濾鏈的依次調用,通過FilterChain調用過濾鏈中的下一個過濾器,如果是最后一個過濾器,則下一個就調用目標資源。

  • destory(用來銷毀)

4、攔截方式

  • request過濾器(默認):只有直接訪問該目標資源時執行。包括:在地址欄中直接訪問、表單提交、超鏈接、重定向

  • forward過濾器:轉發訪問執行過濾器。包括RequestDispatcher#forward()方法,標簽都是轉發訪問;

  • include過濾器:包含訪問執行過濾器。包括RequestDispatcher#include()方法,標簽都是包含訪問;

  • error過濾器:配置,出現該異常代碼時,執行過濾器。

     1 <filter>
     2         <filter-name>patronliFilter</filter-name>//定義名字  
     3         <filter-class>com.servlet.DemoFilter</filter-class>//實現類  
     4 </filter>  
     5 <filter-mapping>
     6         <filter-name>DemoFilter</filter-name>  
     7         <url-pattern>/*</url-pattern>  
     8         <!-- 過濾器攔截規則:request過濾器,include過濾器,forward過濾器,error過濾器 -->
     9         <dispatcher>REQUEST</dispatcher>  
    10         <dispatcher>FORWARD</dispatcher>  
    11 </filter-mapping>  
    12 <!-- 如果想要配置多個攔截器,可以依次向下寫 -->
     1 import javax.servlet.Filter;        //過濾器接口
     2 import javax.servlet.FilterChain;   //過濾器鏈接口
     3 import javax.servlet.FilterConfig;  //過濾器配置接口,getInitParameter方法用於獲取web.xml中的初始化參數
     4 
     5 public class DemoFilter implements Filter{
     6     protected FilterConfig config;    
     7     protected String encoding;
     8 
     9     @Override //初始化的方法
    10     public void init(FilterConfig config) throws ServletException {
    11        this.config=config;
    12        this.encoding = config.getInitParameter("encoding"); //通過init-param設置參數,在init中取得
    13     }
    14 
    15     @Override //執行過濾的方法
    16     public void doFilter(ServletRequest arg0, ServletResponse arg1,
    17             FilterChain arg2) throws IOException, ServletException {
    18         request.setCharacterEncoding(encoding);
    19         System.out.println("Do...before..");  
    20         chain.doFilter(request, response); //由該方法進入下一過濾鏈。(filter攔截棧,后進先出) 21         System.out.println("Do..after...");  
    22     }
    23 
    24     @Override //銷毀的方法
    25     public void destroy() {
    26     }
    27 }

    引用:web.xml之過濾器詳解

    引用:JavaWeb過濾器和監聽器詳解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM