1. 程式人生 > >過濾器的使用和總結(java)

過濾器的使用和總結(java)

今天學習到了過濾器的使用,在這裡總結一下!過濾器在瀏覽器和伺服器中間,相當於一層篩子,只把符合條件的請求傳遞到伺服器層.

靈魂畫手,不要在意我畫的圖! (/ □ \)
不要在意下面我畫的圖! (/ □ \)

過濾器的作用:(生命週期:伺服器的啟動到伺服器的關閉)

  1. 把伺服器接收到的請求和相應給瀏覽器的資源進行統一的管理!
  2. 保護servlet能接受正常的請求

具體案例:

  1. 統一編碼格式設定。
  2. session管理
  3. 許可權管理
  4. 資源管理

過濾器所處的位置:

 

使用:第一步,需要建立一個普通的java實體類然後繼承Fileter介面,在覆寫介面中的方法.

@Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化)");//伺服器啟動就立即執行,資源初始化.
        
    }

    @Override
    public void doFilter(

ServletRequest request, ServletResponse response,
            FilterChain
chain) throws IOException, ServletException {
        System.out.println("執行");//攔截請求方法,在這裡可以管理資源  注意:
這裡需要對請求進行放行

//符合條件的瀏覽器請求放行
                chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        System.out.println("銷燬");//伺服器關閉執行
        
    }

第二步,需要在web.xml中配置過濾器

<filter>
                      <filter-name>myFilter</filter-name> <!-- 過濾器名字-->
                      <filter-class>com.wzy.filter.MyFilter</filter-class> <!-- 過濾器聯絡的class名字  配置的時候要記著ctrl+單擊,檢視一下是否能跳轉到具體的class中,如果可以跳轉那麼沒問題!如果不行那麼檢查com.wzy.filter.MyFilter這一部分的程式碼!-->
 </filter>


<filter-mapping>
                      <filter-name>myFilter</filter-name>
                      <url-pattern>/*</url-pattern>

<!--

 <url-pattern>這裡的 /* 是對有所的請求進行過濾! (相當於小區門口的保安人員!屬於第一級過濾)

如果想要設定多個過濾器,那麼改成 *.Type (--這裡的Type是字尾的統稱.只對Type這種型別的請求進行過濾!相當於小區每棟樓的管理人員!屬於第二級過濾,)

要是想要過濾具體的servlet請求就需要將url-pattern設定成  /servlet名字.Type  就可以保護servlet!(相當於自己養的看門狗!屬於第三級過濾)

-->
</filter-mapping>

執行順序:

  • 瀏覽器發起請求到伺服器,伺服器接收到請求後,根據URI資訊在web.xml中找到對應的過濾器執行doFilter方法,該方法對此次請求進行處理後如果符合要求則放行。
  • 放行後如果還有符合要求的過濾則繼續進行過濾,找到執行對應的servlet進行請求處理。servlet對請求處理完畢後,也就service方法結束了。還需繼續返回相應的doFilter方法繼續執行。

總結:
            過濾器就是先宣告一個class,然後修改web.xml中的程式碼.主要涉及到的標籤有:

<filter>
                      <filter-name>俺的名字</filter-name>
                      <filter-class>class類的名字</filter-class>
</filter>

<filter-mapping>
                      <filter-name>俺的名字(和上邊一致)</filter-name>
                      <url-pattern>/*</url-pattern> <!-- 需要過濾那些東西-->
</filter-mapping>