servlet/filter/listener/interceptor區(qū)別與聯(lián)系

從以下幾個方面闡述一下題目中四個概念的區(qū)別與聯(lián)系:

     1箕般、概念

     2沥潭、生命周期

     3敛熬、職責(zé)

     4、區(qū)別

     5滑蚯、執(zhí)行流程圖

一俺附、概念:

  1. servlet:servlet是一種運行服務(wù)器端的java應(yīng)用程序肥卡,具有獨立于平臺和協(xié)議的特性,并且可以動態(tài)的生成web頁面事镣,它工作在客戶端請求與服務(wù)器響應(yīng)的中間層步鉴。

  2. filter:filter是一個可以復(fù)用的代碼片段,可以用來轉(zhuǎn)換HTTP請求璃哟、響應(yīng)和頭信息氛琢。Filter不像Servlet,它不能產(chǎn)生一個請求或者響應(yīng)随闪,它只是修改對某一資源的請求阳似,或者修改從某一的響應(yīng)。

  3. listener:監(jiān)聽器铐伴,從字面上可以看出listener主要用來監(jiān)聽只用障般。通過listener可以監(jiān)聽web服務(wù)器中某一個執(zhí)行動作,并根據(jù)其要求作出相應(yīng)的響應(yīng)盛杰。通俗的語言說就是在application,session藐石,request三個對象創(chuàng)建消亡或者往其中添加修改刪除屬性時自動執(zhí)行代碼的功能組件即供。

  4. interceptor:是在面向切面編程的,就是在你的service或者一個方法于微,前調(diào)用一個方法逗嫡,或者在方法后調(diào)用一個方法,比如動態(tài)代理就是攔截器的簡單實現(xiàn)株依,在你調(diào)用方法前打印出字符串(或者做其它業(yè)務(wù)邏輯的操作)驱证,也可以在你調(diào)用方法后打印出字符串,甚至在你拋出異常的時候做業(yè)務(wù)邏輯的操作恋腕。

  5. servlet抹锄、filter、listener是配置到web.xml中,interceptor不配置到web.xml中伙单,struts的攔截器配置到struts.xml中获高。spring的攔截器配置到spring.xml中。

二吻育、生命周期:

  1. servlet:servlet的生命周期始于它被裝入web服務(wù)器的內(nèi)存時念秧,并在web服務(wù)器終止或重新裝入servlet時結(jié)束。servlet一旦被裝入web服務(wù)器布疼,一般不會從web服務(wù)器內(nèi)存中刪除摊趾,直至web服務(wù)器關(guān)閉或重新裝入。
    (1). 裝入:啟動服務(wù)器時加載Servlet的實例(如果你設(shè)置<load-on-startup>的值是一個大于0的數(shù)游两,則tomcat在啟動時就會創(chuàng)建servlet砾层,如果沒有設(shè)置這個屬性,則是第一次訪問時創(chuàng)建)器罐;
    (2). 初始化:web服務(wù)器啟動時或web服務(wù)器接收到請求時梢为,或者兩者之間的某個時刻啟動。初始化工作有init方法負責(zé)執(zhí)行完成轰坊;(init方法只執(zhí)行一次)
    (3). 調(diào)用:從第一次到以后的多次訪問铸董,都是只調(diào)用doGet()或doPost()方法;
    (4). 銷毀:停止服務(wù)器時調(diào)用destroy()方法肴沫,銷毀實例粟害。
image.png
  1. filter:(一定要實現(xiàn)javax.servlet包的Filter接口的三個方法init()、doFilter()颤芬、destroy()悲幅,空實現(xiàn)也行)
    (1). 啟動服務(wù)器時加載過濾器的實例,并調(diào)用init()方法來初始化實例站蝠;
    (2). 每一次請求時都只調(diào)用方法doFilter()進行處理汰具;
    (3). 停止服務(wù)器時調(diào)用destroy()方法,銷毀實例菱魔。

  2. listener:類似于servlet和filter
    web.xml 的加載順序是:context- param -> listener -> filter -> servlet

  3. interceptor:以struts的攔截器為例留荔,加載了struts.xml以后,初始化相應(yīng)攔截器澜倦。當(dāng)action請求來時調(diào)用intercept方法聚蝶,服務(wù)器停止銷毀interceptor。

三藻治、職責(zé)

  1. servlet:
    創(chuàng)建并返回一個包含基于客戶請求性質(zhì)的動態(tài)內(nèi)容的完整的html頁面碘勉;
    創(chuàng)建可嵌入到現(xiàn)有的html頁面中的一部分html頁面(html片段);
    讀取客戶端發(fā)來的隱藏數(shù)據(jù)桩卵;
    讀取客戶端發(fā)來的顯示數(shù)據(jù)验靡;
    與其他服務(wù)器資源(包括數(shù)據(jù)庫和java的應(yīng)用程序)進行通信倍宾;
    通過狀態(tài)代碼和響應(yīng)頭向客戶端發(fā)送隱藏數(shù)據(jù)。

  2. filter:
    filter能夠在一個請求到達servlet之前預(yù)處理用戶請求晴叨,也可以在離開servlet時處理http響應(yīng);
    在執(zhí)行servlet之前凿宾,首先執(zhí)行filter程序,并為之做一些預(yù)處理工作兼蕊;
    根據(jù)程序需要修改請求和響應(yīng)初厚;
    在servlet被調(diào)用之后截獲servlet的執(zhí)行

  3. listener:職責(zé)如概念。
    servlet2.4規(guī)范中提供了8個listener接口孙技,可以將其分為三類产禾,分別如下:
    第一類:與servletContext有關(guān)的listner接口。
    包括:ServletContextListener牵啦、ServletContextAttributeListener
    第二類:與HttpSession有關(guān)的Listner接口亚情。
    包括:HttpSessionListner、HttpSessionAttributeListener哈雏、HttpSessionBindingListener楞件、HttpSessionActivationListener;
    第三類:與ServletRequest有關(guān)的Listener接口裳瘪,
    包括:ServletRequestListner土浸、ServletRequestAttributeListener

  4. interceptor:
    與過濾器十分相似,通過層層攔截彭羹,處理用戶的請求和響應(yīng)黄伊。

四、幾個區(qū)別:

  1. servlet 流程是短的派殷,url傳來之后还最,就對其進行處理,之后返回或轉(zhuǎn)向到某一自己指定的頁面毡惜。它主要用來在 業(yè)務(wù)處理之前進行控制.

  2. filter 流程是線性的拓轻, url傳來之后,檢查之后经伙,可保持原來的流程繼續(xù)向下執(zhí)行扶叉,被下一個filter, servlet接收等,而servlet 處理之后橱乱,不會繼續(xù)向下傳遞。filter功能可用來保持流程繼續(xù)按照原來的方式進行下去粱甫,或者主導(dǎo)流程泳叠,而servlet的功能主要用來主導(dǎo)流程。
    filter可用來進行字符編碼的過濾茶宵,檢測用戶是否登陸的過濾危纫,禁止頁面緩存等.

  3. servlet,filter都是針對url之類的,而listener是針對對象的操作的,如session的創(chuàng)建种蝶,session.setAttribute的發(fā)生契耿,在這樣的事件發(fā)生時做一些事情。
    可用來進行:Spring整合Struts,為Struts的action注入屬性螃征,web應(yīng)用定時任務(wù)的實現(xiàn)搪桂,在線人數(shù)的統(tǒng)計等.

  4. interceptor 攔截器,類似于filter,不過在struts.xml中配置盯滚,不是在web.xml,并且不是針對URL的踢械,而是針對action,當(dāng)頁面提交action時,進行過濾操作魄藕,相當(dāng)于struts1.x提供的plug-in機制内列,可以看作,前者是struts1.x自帶的filter,而interceptor 是struts2 提供的filter.
    與filter不同點:
    (1) 不在web.xml中配置背率,而是在struts.xml中完成配置话瞧,與action在一起
    (2) 可由action自己指定用哪個interceptor 來在接收之前做事

  5. struts2中的過濾器和攔截器的區(qū)別與聯(lián)系:
    (1)攔截器是基于java反射機制的,而過濾器是基于函數(shù)回調(diào)的寝姿。
    (2)過濾器依賴與servlet容器交排,而攔截器不依賴與servlet容器。
    (3)攔截器只能對Action請求起作用会油,而過濾器則可以對幾乎所有請求起作用个粱。
    (4)攔截器可以訪問Action上下文、值棧里的對象翻翩,而過濾器不能都许。
    (5)在Action的生命周期中,攔截器可以多次調(diào)用嫂冻,而過濾器只能在容器初始化時被調(diào)用一次胶征。

五、執(zhí)行流程圖:

  1. servlet:


    image.png
  2. filter:


    image.png

    image.png
  3. listener:
image.png
  1. interceptor:


    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桨仿,一起剝皮案震驚了整個濱河市睛低,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌服傍,老刑警劉巖钱雷,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吹零,居然都是意外死亡罩抗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門灿椅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來套蒂,“玉大人钞支,你說我怎么就攤上這事〔俚叮” “怎么了烁挟?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骨坑。 經(jīng)常有香客問我撼嗓,道長,這世上最難降的妖魔是什么卡啰? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任静稻,我火速辦了婚禮,結(jié)果婚禮上匈辱,老公的妹妹穿的比我還像新娘振湾。我一直安慰自己,他們只是感情好亡脸,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布押搪。 她就那樣靜靜地躺著,像睡著了一般浅碾。 火紅的嫁衣襯著肌膚如雪大州。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天垂谢,我揣著相機與錄音厦画,去河邊找鬼。 笑死滥朱,一個胖子當(dāng)著我的面吹牛根暑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徙邻,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼排嫌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缰犁?” 一聲冷哼從身側(cè)響起淳地,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帅容,沒想到半個月后颇象,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡并徘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年遣钳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饮亏。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡耍贾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出路幸,到底是詐尸還是另有隱情荐开,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布简肴,位于F島的核電站晃听,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏砰识。R本人自食惡果不足惜能扒,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辫狼。 院中可真熱鬧初斑,春花似錦、人聲如沸膨处。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽真椿。三九已至鹃答,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間突硝,已是汗流浹背测摔。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留解恰,地道東北人锋八。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像修噪,于是被迫代替她去往敵國和親查库。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容