filter与servlet对照
能夠說(shuō)是基本一樣的,我不禁要問(wèn),他們之間有什么異同呢。
? ? ? ? 遇到問(wèn)題的時(shí)候也是學(xué)習(xí)的時(shí)候,我就在網(wǎng)上找了點(diǎn)相關(guān)的資料,與大家分享一下:
? ? ? ? 主要從例如以下四個(gè)方面介紹他們之間的差別:
? ? ? ? ? ? ? ? 1.概念。
? ? ? ? ? ? ? ??2.生命周期。
? ? ? ? ? ? ? ??3.職責(zé)。
? ? ? ? ? ? ? ??4.運(yùn)行過(guò)程。
?
? ? ? ? ?1、servlet:servlet是一種執(zhí)行server端的java應(yīng)用程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,而且能夠動(dòng)態(tài)的生成web頁(yè)面,它工作在client請(qǐng)求與server響應(yīng)的中間層。
?
? ? ? ? ?2、filter:filter是一個(gè)能夠復(fù)用的代碼片段。能夠用來(lái)轉(zhuǎn)換HTTP請(qǐng)求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個(gè)請(qǐng)求或者響應(yīng)。它僅僅是改動(dòng)對(duì)某一資源的請(qǐng)求,或者改動(dòng)從某一的響應(yīng)。
? ? ? ?二、生命周期:
?
? ? ? ? 1、servlet:servlet的生命周期始于它被裝入webserver的內(nèi)存時(shí),并在webserver終止或又一次裝入servlet時(shí)結(jié)束。servlet一旦被裝入webserver,一般不會(huì)從webserver內(nèi)存中刪除,直至webserver關(guān)閉或又一次結(jié)束。
? ? ? ? (1)、裝入:啟動(dòng)server時(shí)載入Servlet的實(shí)例;
? ? ? ? (2)、初始化:webserver啟動(dòng)時(shí)或webserver接收到請(qǐng)求時(shí),或者兩者之間的某個(gè)時(shí)刻啟動(dòng)。
初始化工作有init()方法負(fù)責(zé)運(yùn)行完畢;
? ? ? ? (3)、調(diào)用:從第一次到以后的多次訪問(wèn)。都是僅僅調(diào)用doGet()或doPost()方法;
? ? ? ? (4)、銷毀:停止server時(shí)調(diào)用destroy()方法。銷毀實(shí)例。?
?
? ? ? ? 2、filter:(一定要實(shí)現(xiàn)javax.servlet包的Filter接口的三個(gè)方法init()、doFilter()、destroy(),空實(shí)現(xiàn)也行)
? ? ? ? (1)、啟動(dòng)server時(shí)載入過(guò)濾器的實(shí)例,并調(diào)用init()方法來(lái)初始化實(shí)例。
? ? ? ? (2)、每一次請(qǐng)求時(shí)都僅僅調(diào)用方法doFilter()進(jìn)行處理。
? ? ? ? (3)、停止server時(shí)調(diào)用destroy()方法,銷毀實(shí)例。
?
? ? ? ?1、servlet:
?
? ? ? ? 創(chuàng)建并返回一個(gè)包括基于客戶請(qǐng)求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的html頁(yè)面;
? ? ? ? 創(chuàng)建可嵌入到現(xiàn)有的html頁(yè)面中的一部分html頁(yè)面(html片段);
? ? ? ? 讀取client發(fā)來(lái)的隱藏?cái)?shù)據(jù);
? ? ? ? 讀取client發(fā)來(lái)的顯示數(shù)據(jù);
? ? ? ? 與其它server資源(包含數(shù)據(jù)庫(kù)和java的應(yīng)用程序)進(jìn)行通信;
? ? ? ? 通過(guò)狀態(tài)代碼和響應(yīng)頭向client發(fā)送隱藏?cái)?shù)據(jù)。
?
? ? ? ?2、filter:
?
? ? ? ? filter可以在一個(gè)請(qǐng)求到達(dá)servlet之前預(yù)處理用戶請(qǐng)求。也可以在離開servlet時(shí)處理http響應(yīng):
? ? ? ? 在運(yùn)行servlet之前。首先運(yùn)行filter程序,并為之做一些預(yù)處理工作。
? ? ? ? 依據(jù)程序須要改動(dòng)請(qǐng)求和響應(yīng);
? ? ? ? 在servlet被調(diào)用之后截獲servlet的運(yùn)行
? ? ? ? 四、差別:
? ? ? 1,servlet 流程是短的,url傳來(lái)之后。就對(duì)其進(jìn)行處理,之后返回或轉(zhuǎn)向到某一自己指定的頁(yè)面。它主要用來(lái)在 業(yè)務(wù)處理之前進(jìn)行控制.? ? ? ? 2,filter 流程是線性的。 url傳來(lái)之后,檢查之后,可保持原來(lái)的流程繼續(xù)向下運(yùn)行。被下一個(gè)filter, servlet接收等,而servlet 處理之后,不會(huì)繼續(xù)向下傳遞。
filter功能可用來(lái)保持流程繼續(xù)依照原來(lái)的方式進(jìn)行下去。或者主導(dǎo)流程。而servlet的功能主要用來(lái)主導(dǎo)流程。
? ? ? ? ?filter可用來(lái)進(jìn)行字符編碼的過(guò)濾。檢測(cè)用戶是否登陸的過(guò)濾,禁止頁(yè)面緩存等
?五、運(yùn)行流程圖:
? ? ? ? ?1、servlet:
? ? ? ? ? ? ? ?
? ? ? ? ? 2、filter:
? ? ? ? ? ?
總結(jié):
? ? ? ? 剛剛開始java的學(xué)習(xí),對(duì)于兩者的理解也僅僅有這些了,可是在我的學(xué)習(xí)過(guò)程中,發(fā)現(xiàn)事實(shí)上不止是有這兩個(gè)的比較,還有listener和interceptor。他們四者的差別和聯(lián)系。我如今還沒有非常好的把控。等學(xué)到的時(shí)候一起做總結(jié)吧。
版權(quán)聲明:本文博客原創(chuàng)文章。博客,未經(jīng)同意,不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的filter与servlet对照的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VC6中使用内存DC加载并显示JPG图片
- 下一篇: 用组织分析框架分析阿里巴巴集团