日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
聊一聊過濾器與監(jiān)聽器

不少讀者催我寫「過濾器和監(jiān)聽器」,于是我就又來了。

公司專注于為企業(yè)提供做網(wǎng)站、成都做網(wǎng)站、微信公眾號開發(fā)、商城開發(fā),小程序設(shè)計(jì),軟件按需網(wǎng)站設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。

 

什么是過濾器?

 

我們很容易發(fā)現(xiàn),過濾器可以比喻成一張濾網(wǎng)。我們想想現(xiàn)實(shí)中的濾網(wǎng)可以做什么:在泡茶的時候,過濾掉茶葉。那濾網(wǎng)是怎么過濾茶葉的呢?規(guī)定大小的網(wǎng)孔,只要網(wǎng)孔比茶葉小,就可以實(shí)現(xiàn)過濾了!

引申在Web容器中,過濾器可以做:過濾一些敏感的字符串【規(guī)定不能出現(xiàn)敏感字符串】、避免中文亂碼【規(guī)定Web資源都使用UTF-8編碼】、權(quán)限驗(yàn)證等等等,過濾器的作用非常大,只要發(fā)揮想象就可以有意想不到的效果

這次的PDF共有「58」頁,PDF涉及到的內(nèi)容:

  • 過濾器入門和應(yīng)用
  • 監(jiān)聽器入門和應(yīng)用
  • 幾道簡單的過濾器和監(jiān)聽器面試題

過濾器的知識點(diǎn)

「學(xué)某項(xiàng)技術(shù)之前,首先要知道它能干什么,學(xué)了這項(xiàng)技術(shù)有什么好處,再細(xì)學(xué)」

知道了什么是過濾器以后,其實(shí)我們學(xué)的東西就不是很多了,感覺花半天就能學(xué)完了。

首先,我們來認(rèn)識一下Filter接口和相對應(yīng)的doFilter()方法以及它的參數(shù)。

 

學(xué)過我之前的「Servlet」教程,對doFilter()里邊的ServletRequest和ServletResponse應(yīng)該就很了解了,我這里也不贅述了。唯一可能讓人難以理解的就是FilterChain這個接口。

而FilterChain接口里邊其實(shí)也是一個doFilter方法。

 

我們可以這樣理解:過濾器不單單只有一個,那么我們怎么管理這些過濾器呢?在Java中就使用了鏈?zhǔn)浇Y(jié)構(gòu)。把所有的過濾器都放在FilterChain里邊,如果符合條件,就執(zhí)行下一個過濾器(如果沒有過濾器了,就執(zhí)行目標(biāo)資源)。

上面的話好像有點(diǎn)拗口,我們可以想象生活的例子:現(xiàn)在我想在茶杯上能過濾出石頭和茶葉出來。石頭在一層,茶葉在一層。所以茶杯的過濾裝置應(yīng)該有兩層濾網(wǎng)。這個過濾裝置就是FilterChain,過濾石頭的濾網(wǎng)和過濾茶葉的濾網(wǎng)就是Filter。在石頭濾網(wǎng)中,茶葉是屬于下一層的,就把茶葉放行,讓茶葉的濾網(wǎng)過濾茶葉。過濾完茶葉了,剩下的就是茶

對上面的API了解完了以后,我們試著自己寫一個過濾器(實(shí)際上就是實(shí)現(xiàn)Filter接口,重寫doFilter()方法),然后以注解/xml配置的方式來部署自己的過濾器。

隨后看一下FilterChain的執(zhí)行順序是不是自己配置的那樣,再寫幾個常見的過濾器應(yīng)用就好了,比如說「禁止瀏覽器緩存」「實(shí)現(xiàn)自動登錄」「編碼過濾器」「敏感詞過濾器」「壓縮資源過濾器」「HTML轉(zhuǎn)義過濾器」「緩存數(shù)據(jù)」…

 

工作中用「過濾器」多嗎?

三歪在工作時間不長哈,接觸了好多些系統(tǒng),由我們自己去寫「過濾器」的場景還是不多的。但我覺得有一點(diǎn)可以好好學(xué)學(xué),就是「責(zé)任鏈模式」。

之前為啥我寫了一篇「責(zé)任鏈模式」,其實(shí)就是這個設(shè)計(jì)模式在系統(tǒng)中用得挺多的,號稱能搞掂if else。

過濾器其實(shí)也是責(zé)任鏈模式的一種實(shí)現(xiàn),F(xiàn)ilterChain層層往下執(zhí)行,直到最后沒有過濾器,就到了「目標(biāo)資源」

 

什么是監(jiān)聽器?

監(jiān)聽器就是一個實(shí)現(xiàn)特定接口的普通Java程序,這個程序?qū)iT用于監(jiān)聽一個Java對象的方法調(diào)用或?qū)傩愿淖?,?dāng)被監(jiān)聽對象發(fā)生上述事件后,監(jiān)聽器某個方法將立即被執(zhí)行。

上面這句話應(yīng)該也很好理解,比如說我有一個SanWai對象,里邊有一個eat()方法。每當(dāng)SanWai.eat()的時候,我的監(jiān)聽器可以監(jiān)聽到SanWai.eat()被調(diào)用了,于是我們就可以搞一波邏輯,做別的事了。

  • 比如說,三歪女朋友發(fā)現(xiàn)三歪要吃飯了,于是打電話讓三歪少吃點(diǎn)。

 

回到Servlet層面上,我們更多的監(jiān)聽的是「Session」「Request」「ServletContext」這幾個對象的創(chuàng)建/銷毀/屬性內(nèi)的變化。

針對監(jiān)聽上面的幾個對象,我們可以做出一些小例子,比如說「統(tǒng)計(jì)網(wǎng)站的在線人數(shù)」「自動踢人」「定時清除Session的值」

 

監(jiān)聽器在工作中用得多嗎?

監(jiān)聽器在寫業(yè)務(wù)代碼的時候,同樣也用得不多,我?guī)缀鯖]怎么寫過監(jiān)聽器的代碼。

但是理解監(jiān)聽器這個概念我覺得還是很有必要的。以我的理解,大概可以認(rèn)為「A發(fā)生了變化,B需要依賴A發(fā)生的變化做出處理」,這就是監(jiān)聽器。

有人認(rèn)為,這不就是「事件驅(qū)動」嗎?我覺得也可以那樣理解。

監(jiān)聽器和過濾器再總結(jié)

監(jiān)聽器和過濾器在工作中可能讓我們自己「手寫」的概率不是很大,但我覺得這兩個技術(shù)還是需要了解的。如果你了解過Struts2,你就會發(fā)現(xiàn)Struts2就是用的過濾器來實(shí)現(xiàn)很多的功能。監(jiān)聽器在Spring源碼里邊也有很多的實(shí)現(xiàn),我覺得都可以看看。

過濾器和監(jiān)聽器還是需要理解它的思想,這塊對我們學(xué)習(xí)Spring也是很有幫助的。

現(xiàn)在已經(jīng)工作有一段時間了,為什么還來寫過濾器和監(jiān)聽器呢,原因有以下幾個:

  • 我是一個對排版有追求的人,如果早期關(guān)注我的同學(xué)可能會發(fā)現(xiàn),我的GitHub、文章導(dǎo)航的read.me會經(jīng)常更換?,F(xiàn)在的GitHub導(dǎo)航也不合我心意了(太長了),并且早期的文章,說實(shí)話排版也不太行,我決定重新搞一波。
  • 我的文章會分發(fā)好幾個平臺,但文章發(fā)完了可能就沒人看了,并且圖床很可能因?yàn)槠脚_的防盜鏈就掛掉了。又因?yàn)橛泻芏嗟淖x者問我:”你能不能把你的文章轉(zhuǎn)成PDF啊?“
  • 我寫過很多系列級的文章,這些文章就幾乎不會有太大的改動了,就非常適合把它們給”持久化“。

網(wǎng)站標(biāo)題:聊一聊過濾器與監(jiān)聽器
本文鏈接:http://www.5511xx.com/article/djeshsj.html