Servlet和Filter之間的區(qū)別與聯(lián)系
filter是一個(gè)可以復(fù)用的代碼片段,可以用來(lái)轉(zhuǎn)換HTTP請(qǐng)求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個(gè)請(qǐng)求或者響應(yīng),它只是修改對(duì)某一資源的請(qǐng)求,或者修改從某一的響應(yīng)。
最近使用插裝的時(shí)候,改用cookie對(duì)計(jì)算機(jī)進(jìn)行識(shí)別,加入了過(guò)濾,仔細(xì)研究了一下servlet和filter,區(qū)別主要是:
過(guò)濾器的生命周期一般都要經(jīng)過(guò)下面三個(gè)階段:
servlet的特點(diǎn)是:
初始化
當(dāng)容器第一次加載該過(guò)濾器時(shí),init() 方法將被調(diào)用。該類(lèi)在這個(gè)方法中包含了一個(gè)指向 Filter Config 對(duì)象的引用。我們的過(guò)濾器實(shí)際上并不需要這樣做,因?yàn)槠渲袥](méi)有使用初始化信息,這里只是出于演示的目的。
過(guò)濾
過(guò)濾器的大多數(shù)時(shí)間都消耗在這里。doFilter方法被容器調(diào)用, 同時(shí)傳入分別指向這個(gè)請(qǐng)求/響應(yīng)鏈中的 Servlet Request、Servlet Response 和 Filter Chain 對(duì)象的引用。然后過(guò)濾器就有機(jī)會(huì)處理請(qǐng)求,將處理任務(wù)傳遞給鏈中的下一個(gè)資源(通過(guò)調(diào)用 Filter Chain 對(duì)象引用上的 doFilter方法),之后在處理控制權(quán)返回該過(guò)濾器時(shí)處理響應(yīng)。
析構(gòu)
容器緊跟在垃圾收集之前調(diào)用 destroy()方法,以便能夠執(zhí)行任何必需的清理代碼。
關(guān)于chain.doFilter(request,response)他的作用是將請(qǐng)求轉(zhuǎn)發(fā)給過(guò)濾器鏈上下一個(gè)對(duì)象。這里的下一個(gè)指的是下一個(gè)filter,如果沒(méi)有filter那就是你請(qǐng)求的資源。 一般filter都是一個(gè)鏈,web.xml 里面配置了幾個(gè)就有幾個(gè)。一個(gè)一個(gè)的連在一起
request -> filter1 -> filter2 ->filter3 -> .... -> request resource.
filter是鏈?zhǔn)讲僮?,那么在處理單個(gè)filter時(shí)必須最后跳轉(zhuǎn)到servlet對(duì)請(qǐng)求進(jìn)行響應(yīng)。
如果走chain的話,通過(guò)chain.doFilter(request,response)這個(gè)方法會(huì)立即跳轉(zhuǎn)到被攔截的servlet并且執(zhí)行完還要再返回filter.chain相當(dāng)于一扇門(mén),從這扇門(mén)出去再?gòu)倪@扇門(mén)回來(lái).調(diào)用filter的方法就是在web.xml中配置,需要配置一個(gè)與你需要攔截的servlet相同的url-pattern.
<!-- 配置一個(gè)過(guò)濾器 --> <filter> <filter-name>suibianxie</filter-name> <filter-class>com.etoak.filter.MyEncoding</filter-class> <!-- 配置一個(gè)私有參數(shù) --> <init-param> <param-name>mycode</param-name> <param-value>gbk</param-value> </init-param> </filter> <!-- 攔截的先后順序和mapping的順序有關(guān) --> <filter-mapping> <filter-name>suibianxie</filter-name> <!-- 注意這里和要攔截的servlet的url-pattern必須一致,等于是過(guò)濾器 搶在servlet之前攔截住了 --> <url-pattern>/servlet/Test</url-pattern> </filter-mapping> <!-- 配置第二個(gè)過(guò)濾器 --> <filter> <filter-name>suibianxie2</filter-name> <filter-class>com.etoak.filter.Naming</filter-class> </filter> <filter-mapping> <filter-name>suibianxie2</filter-name> <url-pattern>/servlet/Test</url-pattern> </filter-mapping> <servlet> <servlet-name>Test</servlet-name> <servlet-class>com.etoak.servlet.Test</servlet-class> </servlet> <servlet-mapping> <servlet-name>Test</servlet-name> <url-pattern>/servlet/Test</url-pattern> </servlet-mapping>
以上所述是小編給大家介紹的Servlet和Filter之間的區(qū)別與聯(lián)系,希望對(duì)大家有所幫助!
- springboot掃描自定義的servlet和filter代碼詳解
- servlet過(guò)濾器(Filter)詳解(九)
- SpringBoot初始教程之Servlet、Filter、Listener配置詳解
- 詳談Servlet和Filter的區(qū)別以及兩者在Struts2和Springmvc中的應(yīng)用
- web.xml中servlet, bean, filter, listenr 加載順序_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Filter、Servlet、Listener的學(xué)習(xí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Spring Boot 編寫(xiě)Servlet、Filter、Listener、Interceptor的方法
- 詳解Servlet之過(guò)濾器(Filter)
- Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系
- 解決cannot be cast to javax.servlet.Filter 報(bào)錯(cuò)的問(wèn)題
- JavaWeb Servlet中Filter過(guò)濾器的詳解
相關(guān)文章
jdk動(dòng)態(tài)代理和cglib動(dòng)態(tài)代理詳解
本篇文章主要介紹了深度剖析java中JDK動(dòng)態(tài)代理機(jī)制 ,動(dòng)態(tài)代理避免了開(kāi)發(fā)人員編寫(xiě)各個(gè)繁鎖的靜態(tài)代理類(lèi),只需簡(jiǎn)單地指定一組接口及目標(biāo)類(lèi)對(duì)象就能動(dòng)態(tài)的獲得代理對(duì)象2021-07-07Spring數(shù)據(jù)庫(kù)連接池url參數(shù)踩坑及解決
這篇文章主要介紹了Spring數(shù)據(jù)庫(kù)連接池url參數(shù)踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09springboot2+mybatis多種方式實(shí)現(xiàn)多數(shù)據(jù)配置方法
這篇文章主要介紹了springboot2+mybatis多種方式實(shí)現(xiàn)多數(shù)據(jù)配置方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03java實(shí)現(xiàn)memcache服務(wù)器的示例代碼
本篇文章主要介紹了java實(shí)現(xiàn)memcache服務(wù)器的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Java添加事件監(jiān)聽(tīng)的四種方法代碼實(shí)例
這篇文章主要介紹了Java添加事件監(jiān)聽(tīng)的四種方法代碼實(shí)例,本文直接給出代碼示例,并用注釋說(shuō)明,需要的朋友可以參考下2014-09-09Mybatis-Plus自定義集合類(lèi)型的類(lèi)型處理器詳解
這篇文章主要介紹了Mybatis-Plus自定義集合類(lèi)型的類(lèi)型處理器詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot入門(mén)之集成Druid的方法示例
這篇文章主要介紹了SpringBoot入門(mén)之集成Druid的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗(yàn)證、文件上傳實(shí)例代碼
這篇文章主要介紹了Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗(yàn)證、文件上傳 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07