深入了解Java中的過濾器Filter和監(jiān)聽器Listener
Filter:過濾器
概念
生活中的過濾器:凈水器,空氣凈化器,土匪、 web中的過濾器:當(dāng)訪問服務(wù)器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。 過濾器的作用:
一般用于完成通用的操作。如:登錄驗(yàn)證、統(tǒng)一編碼處理、敏感字符過濾...
快速入門
步驟
1.定義一個類,實(shí)現(xiàn)接口Filter
2.復(fù)寫方法
3.配置攔截路徑
- web.xml
- 注解
代碼
@WebFilter("/*")//訪問所有資源之前,都會執(zhí)行該過濾器 public class FilterDemo1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("filterDemo1被執(zhí)行了...."); //放行 filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { } }
過濾器細(xì)節(jié)
web.xml配置
<filter> <filter-name>demo1</filter-name> <filter-class>cn.zjq.web.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <!-- 攔截路徑 --> <url-pattern>/*</url-pattern> </filter-mapping>
過濾器執(zhí)行流程
- 執(zhí)行過濾器
- 執(zhí)行放行后的資源
- 回來執(zhí)行過濾器放行代碼下邊的代碼
過濾器生命周期方法
- init:在服務(wù)器啟動后,會創(chuàng)建Filter對象,然后調(diào)用init方法。只執(zhí)行一次。用于加載資源
- doFilter:每一次請求被攔截資源時,會執(zhí)行。執(zhí)行多次
- destroy:在服務(wù)器關(guān)閉后,F(xiàn)ilter對象被銷毀。如果服務(wù)器是正常關(guān)閉,則會執(zhí)行destroy方法。只執(zhí)行一次。用于釋放資源
過濾器配置詳解
攔截路徑配置:
- 具體資源路徑: /index.jsp 只有訪問index.jsp資源時,過濾器才會被執(zhí)行
- 攔截目錄: /user/* 訪問/user下的所有資源時,過濾器都會被執(zhí)行
- 后綴名攔截: *.jsp 訪問所有后綴名為jsp資源時,過濾器都會被執(zhí)行
- 攔截所有資源:/* 訪問所有資源時,過濾器都會被執(zhí)行
攔截方式配置:資源被訪問的方式
注解配置:
- 設(shè)置dispatcherTypes屬性
- REQUEST:默認(rèn)值。瀏覽器直接請求資源
- FORWARD:轉(zhuǎn)發(fā)訪問資源
- INCLUDE:包含訪問資源
- ERROR:錯誤跳轉(zhuǎn)資源
- ASYNC:異步訪問資源
web.xml配置 設(shè)置標(biāo)簽即可
過濾器鏈(配置多個過濾器)
執(zhí)行順序:如果有兩個過濾器:過濾器1和過濾器2
- 過濾器1
- 過濾器2
- 資源執(zhí)行
- 過濾器2
- 過濾器1
過濾器先后順序問題:
- 注解配置:按照類名的字符串比較規(guī)則比較,值小的先執(zhí)行
如: AFilter 和 BFilter,AFilter就先執(zhí)行了。 2. web.xml配置: 誰定義在上邊,誰先執(zhí)行
Listener:監(jiān)聽器
概念:web的三大組件之一。 事件監(jiān)聽機(jī)制
- 事件:一件事情
- 事件源 :事件發(fā)生的地方
- 監(jiān)聽器 :一個對象
- 注冊監(jiān)聽:將事件、事件源、監(jiān)聽器綁定在一起。 當(dāng)事件源上發(fā)生某個事件后,執(zhí)行監(jiān)聽器代碼
ServletContextListener:監(jiān)聽ServletContext對象的創(chuàng)建和銷毀 方法: void contextDestroyed(ServletContextEvent sce)
:ServletContext對象被銷毀之前會調(diào)用該方法 void contextInitialized(ServletContextEvent sce)
:ServletContext對象創(chuàng)建后會調(diào)用該方法 步驟:
- 定義一個類,實(shí)現(xiàn)ServletContextListener接口
- 復(fù)寫方法
- 配置
web.xml
<listener> <listener-class>cn.zjq.web.listener.ContextLoaderListener</listener-class> </listener>
指定初始化參數(shù)
注解:
@WebListener
到此這篇關(guān)于深入了解Java中的過濾器Filter和監(jiān)聽器Listener的文章就介紹到這了,更多相關(guān)Java過濾器 監(jiān)聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系
- java 在Jetty9中使用HttpSessionListener和Filter
- Filter、Servlet、Listener的學(xué)習(xí)_動力節(jié)點(diǎn)Java學(xué)院整理
- Java web三件套listener、filter、servelt原理解析
- JavaWeb學(xué)習(xí)筆記之Filter和Listener
- JavaWeb之Filter與Listener使用解析
- Java學(xué)習(xí)手冊之Filter和Listener使用方法
相關(guān)文章
如何解決Could not transfer artifact org.spri
在Maven更新過程中遇到“Could not transfer artifact org.springframework.boot”錯誤通常是由于網(wǎng)絡(luò)問題,解決方法是在Maven的設(shè)置中忽略HTTPS,添加特定語句后,可以正常下載依賴,但下載速度可能較慢,這是一種常見的解決方案,希望對遇到相同問題的人有所幫助2024-09-09動態(tài)修改spring?aop?切面信息提升自動日志輸出框架效率
這篇文章主要為大家介紹了動態(tài)修改spring?aop切面信息提升自動日志輸出框架效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07java8?Stream大數(shù)據(jù)量List分批處理切割方式
這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02