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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
打開今日頭條,查看更多圖片※vi使用方法詳細介紹
※Windows版本redis高可用方案探究
TAG:程序員小新人學習 |