當前位置:
首頁 > 知識 > Filter過濾器和Listener監聽器的的用法和區別

Filter過濾器和Listener監聽器的的用法和區別

過濾器Filters

概要

過濾器的作用

過濾器的說明

Filer介面的生命周期

Filter的實現與配置

spring自帶的字元編碼過濾器

Listener監聽器

概要

Listener的實現與配置

關係

過濾器Filters

概要

java web的過濾器是從Servlet2.3規範開始增加的功能,並在Servlet2.4規範中得到增強。過濾器是駐留在web服務端的web組件

過濾器的作用

對資源進行統一管理,具體是對請求數據request進行預處理,對響應數據response進行預處理和保護Servlet

用途:統一編碼格式,session的管理(用戶登錄),許可權管理等

過濾器的說明

1. Filter是Servlet介面下的一個子介面,我們是為Servlet配置Filter

2. 過濾器由程序員聲明和配置,伺服器根據請求中的url信息,在web.xml文件中找到對應的過濾器執行doFilter()方法。

3. 執行doFilter()方法後,如果請求符合要求,則執行放行方法。放行後如果還有符合要求的過濾器繼續進行過濾。

Filer介面的生命周期

生命周期為伺服器啟動到伺服器關閉

void init(FilterConfig filterConfig):Servlet容器初始化Filter時,會觸發Filter的init方法,而且這個方法只調用一次,注意:伺服器啟動時就會執行此方法,也就是初始化Filter。

void doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain):攔截請求的方法,在此方法中對資源進行管理,需要手動對請求進行放行,否則處理會中斷。

注意最後一個參數FilterChain

//處理完畢後對請求進行放行

filterChain.doFilter(request,response)

1

2

void destroy():Servlet容器銷毀Filter時觸發,一般在應用停止的時候調用

Filter的實現與配置

第一步:創建一個實現Filter介面的java類

第二步:在web.xml文件中進行配置

<!--在web.xml中進行配置-->

<filter>

<filter-name>filtername</filter-name>

<filter-class>

Filter實現類的全路徑

</filter-class>

</filter>

<filter-mapping>

<filter-name>filtername</filter-name>

<!--

/*:表示攔截所有的請求

*.do:表示攔截以.do結尾的請求,一般進行模塊攔截處理

/ts:表示攔截指定url的請求,針對某個Servlet的請求進行攔截,主要用於保護Servlet

-->

<url-pattern>/*</url-pattern>

</filter>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

配置二:

Filter還可以通過Annotation來配置,但是當一個資源需要被多個Filter攔截時,只能通過部署描述符來配置

spring自帶的字元編碼過濾器

<!-- 字符集過濾器 -->

<filter>

<description>字符集過濾器</description>

<filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Listener監聽器

概要

Servlet API 提供了一系列事件和事件監聽介面,上層的servlet/jsp應用能夠通過調用這些API進行事件驅動的開發。這裡監聽的所有事件都繼承自java.util.Event對象,監聽器介面可以分為三類:ServletContext、HttpSession、ServletRequest

監聽器常見的用途:網站在先人數、監管用戶的行為

監聽器主要在java.servlet和java.servlet.http的包中,有以下8大介面:

java.servlet.ServletContextListener:他能夠響應ServletContext生命周期事件,它提供了ServletContext創建之後和關閉之前會被調用的方法。

java.servlet.ServletContextAttributeListener:他能夠響應ServletContext範圍內屬性添加、刪除、替換事件

java.servlet.http.HttpSessionListener:它能夠響應HttpSession的創建、超時、和失效事件

java.servlet.http.HttpSesiosnAttributeListener:它能夠響應HttpSession範圍內屬性添、刪除、替換事件

java.servlet.http.HttpSessionActivationListener:它在一個HttpSession激活或失效時被調用

java.servlet.http.HttpSessionBindingingstener:可以實現這個介面來保存HttpSession範圍被的屬性。當有屬性從HttpSession添加或者刪除時,HttpSessionBindingListener介面能夠做出響應

java.servlet.ServletRequestListener:它能夠響應一個ServletRequest的創建或刪除

java.servlet.ServletRequestAttributeListener:它能夠響應ServletRequest範圍內屬性值添加、刪除、修改事件

監聽作用域對象Request,Response,Application的創建、銷毀和內容的改變

監聽內容為:創建、銷毀添加屬性事件

Listener的實現與配置

第一步:創建實現指定介面的java類

public class MyRequestListener implements ServletRequestListener {

@Override

public void requestDestroyed(ServletRequestEvent sre) {

}

@Override

public void requestInitialized(ServletRequestEvent sre) {

}

}

1

2

3

4

5

6

7

8

9

10

11

第二步:在web.xml中配置監聽器類

<!--在web.xml中進行配置-->

<listener>

<listener-class>類的全路徑名</listener-class>

</listener>

1

2

3

4

關係

1. 監聽器和過濾器都配置在web.xml文件中 2. 執行順序:監聽器>過濾器 3. 一個web.xml文件中可以配置多個監聽器,它們的啟動順序按照配置的順序啟動。

---------------------

作者:yuqiang666

原文:https://blog.csdn.net/qq_41357573/article/details/84942181

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

Filter過濾器和Listener監聽器的的用法和區別

打開今日頭條,查看更多圖片
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

vi使用方法詳細介紹
Windows版本redis高可用方案探究

TAG:程序員小新人學習 |