初学Java Web(8)——过滤器和监听器
什么是過濾器
過濾器就是 Servlet 的高級(jí)特性之一,就是一個(gè)具有攔截/過濾功能的一個(gè)東西,在生活中過濾器可以是香煙濾嘴,濾紙,凈水器,空氣凈化器等,在 Web 中僅僅是一個(gè)實(shí)現(xiàn)了 Filter 接口的 Java 類而已。
-
特點(diǎn):雙向,攔截請(qǐng)求,攔截響應(yīng)
-
作用:
過濾器可以對(duì)所有的請(qǐng)求或者響應(yīng)做攔截操作
為什么在 Web 開發(fā)中需要用到過濾器?
- 問題:為什么非得使用過濾器,我直接在 Servlet 中作判斷不行嗎?
- 開發(fā)遵循的原則:
1.DRY原則(Don't Reeat Yourself,不要重復(fù)你自己):重復(fù),意味著維護(hù)的成本很高。
2.責(zé)任分離原則:誰擅長(zhǎng)什么功能就做什么功能,Servlet 擅長(zhǎng)的是邏輯而不是處理請(qǐng)求
舉一個(gè)實(shí)際的例子:(處理 POST 請(qǐng)求中文編碼的問題)
- Web 中過濾器的作用:
1.可以在請(qǐng)求資源之前設(shè)置請(qǐng)求的編碼
2.可以進(jìn)行登錄校驗(yàn)
3.可以進(jìn)行請(qǐng)求參數(shù)的內(nèi)容的過濾
4.數(shù)據(jù)壓縮 / 數(shù)據(jù)加密 / 數(shù)據(jù)格式的轉(zhuǎn)換
5.可以設(shè)置瀏覽器相關(guān)的數(shù)據(jù)
Filter 的開發(fā)和使用
對(duì)應(yīng)于 Servlet 的開發(fā)步驟:
- 注意:此時(shí)?<url-pattern>?表示對(duì)哪些資源做過濾/攔截。例如:
- /hello.jsp
當(dāng)前 Filter 就僅僅只對(duì) hello.jsp 資源做攔截. - /index
當(dāng)前 Filter 就僅僅只對(duì) /index 資源做攔截. - /*
當(dāng)前 Filter 就對(duì)所有資源做攔截.訪問任意的資源,都會(huì)先進(jìn)入該過濾器器. - /system/*
當(dāng)前 Filter 就對(duì)以?/system/?打頭的資源做攔截.
如/system?,?/system/a,?/system/a/b/c,?/systema
Filter 映射細(xì)節(jié)
- <dispatcher>配置項(xiàng)指定了 Filter 的過濾時(shí)間:
- REQUEST:只對(duì)請(qǐng)求做過濾,默認(rèn)選項(xiàng),如果有該配置項(xiàng)則必須顯式寫明
- FORWARD:只對(duì)請(qǐng)求轉(zhuǎn)發(fā)(forword)方式做過濾
- ERROR:只對(duì)跳轉(zhuǎn)到全局的錯(cuò)誤頁(yè)面做過濾
- INCLUDE:只對(duì)請(qǐng)求包含(include)方式做過濾
- 對(duì)應(yīng)的注解屬性為:dispatcherTypes
過濾器實(shí)例
戳這里
監(jiān)聽器
-
作用:
1.監(jiān)聽 web 應(yīng)用的創(chuàng)建和銷毀
2.attribute發(fā)生的變化。 -
web 應(yīng)用:即ServletContext對(duì)象(jsp的隱式對(duì)象application)
除了對(duì)web應(yīng)用的監(jiān)聽外,還能監(jiān)聽session和request的生命周期,以及他們的attribute發(fā)生的變化。
了解詳情戳這里
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處!
簡(jiǎn)書ID:@我沒有三顆心臟
github:wmyskxz
總結(jié)
以上是生活随笔為你收集整理的初学Java Web(8)——过滤器和监听器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初学Java Web(7)——文件的上传
- 下一篇: 初学Java Web(9)——学生管理系