servlet/filter/listener/interceptor區別與聯系

?下面從幾個方面闡述一下題目中四個概念的區別與聯系:

? ? ? ? ?1、概念

? ? ? ? ?2、生命周期

? ? ? ? ?3、職責

? ? ? ? ?4、執行過程

? ? ? ??

? ? ? ? ?一、概念:

? ? ? ? ?1、servlet:servlet是一種運行服務器端的Java應用程序,具有獨立于平臺和協議的特性,并且可以動態的生成web頁面,它工作在客戶端請求與服務器響應的中間層。

? ? ? ? ?2、filter(過濾):filter是一個可以復用的代碼片段,可以用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。

? ? ? ? 3、listener:監聽器,從字面上可以看出listener主要用來監聽只用。通過listener可以監聽web服務器中某一個執行動作,并根據其要求作出相應的響應。通俗的語言說就是在application,session,request三個對象創建消亡或者往其中添加修改刪除屬性時自動執行代碼的功能組件。

? ? ? ? ?4、interceptor(攔截機):是在面向切面編程的,就是在你的service或者一個方法,前調用一個方法,或者在方法后調用一個方法,比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法后打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。

? ? ? 5、servlet、filter、listener是配置到web.xml中,interceptor不配置到web.xml中,struts的攔截器配置到struts.xml中。spring的攔截器配置到spring.xml中。?

? ? ? ? 二、生命周期:

? ? ? ? 1、servlet:servlet的生命周期始于它被裝入web服務器的內存時,并在web服務器終止或重新裝入servlet時結束。servlet一旦被裝入web服務器,一般不會從web服務器內存中刪除,直至web服務器關閉或重新結束。
? ? ? ? ??(1)、裝入:啟動服務器時加載Servlet的實例;?
? ? ? ? (2)、初始化:web服務器啟動時或web服務器接收到請求時,或者兩者之間的某個時刻啟動。初始化工作有init()方法負責執行完成;?
? ? ? ? (3)、調用:從第一次到以后的多次訪問,都是只調用doGet()或doPost()方法;?
? ? ? ? (4)、銷毀:停止服務器時調用destroy()方法,銷毀實例。?

? ? ? ??

? ? ? ? ? ?2、filter:(一定要實現javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現也行)?
? ? ? ? ?(1)、啟動服務器時加載過濾器的實例,并調用init()方法來初始化實例;?
? ? ? ? ?(2)、每一次請求時都只調用方法doFilter()進行處理;?
? ? ? ? ?(3)、停止服務器時調用destroy()方法,銷毀實例。

? ? ? ? ?3、listener:類似于servlet和filter

? ? ? ? ? ?web.xml?的加載順序是:context- param?->?listener?->?filter?->?servlet?

? ? ? ?4、interceptor:以struts的攔截器為例,加載了struts.xml以后,初始化相應攔截器。當action請求來時調用intercept方法,服務器停止銷毀interceptor。

? ? ? ?三、職責

? ? ? ?1、servlet:

? ? ? ? 創建并返回一個包含基于客戶請求性質的動態內容的完整的html頁面;
? ? ? ? 創建可嵌入到現有的html頁面中的一部分html頁面(html片段);
? ? ? ? 讀取客戶端發來的隱藏數據;
? ? ? ? 讀取客戶端發來的顯示數據;
? ? ? ? 與其他服務器資源(包括數據庫和java的應用程序)進行通信;
? ? ? ? 通過狀態代碼和響應頭向客戶端發送隱藏數據。

? ? ? ?2、filter:

? ? ? ??filter能夠在一個請求到達servlet之前預處理用戶請求,也可以在離開servlet時處理http響應:
? ? ? ? 在執行servlet之前,首先執行filter程序,并為之做一些預處理工作;
? ? ? ? 根據程序需要修改請求和響應;
? ? ? ? 在servlet被調用之后截獲servlet的執行

? ? ? ? ?3、listener:職責如概念。

? ? ? ? ??servlet2.4規范中提供了8個listener接口,可以將其分為三類,分別如下:
? ? ? ? ?第一類:與servletContext有關的listner接口。包括:ServletContextListener、ServletContextAttributeListener
? ? ? ? ?第二類:與HttpSession有關的Listner接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、 ? ? ? ? ? ? ? ? ? ? ?HttpSessionActivationListener;
? ? ? ? ?第三類:與ServletRequest有關的Listener接口,包括:ServletRequestListner、ServletRequestAttributeListener

? ? ? ? 4、interceptor:與過濾器十分相似,通過層層攔截,處理用戶的請求和響應。

?

? ? ? ? 備注:web.xml 的加載順序是:context-param -> listener -> filter -> servlet?。了解了這幾個概念的區別以后,不難理論這個加載順序了。

?

? ? ? ? 四、幾個區別:

? ? ? ??1,servlet 流程是短的,url傳來之后,就對其進行處理,之后返回或轉向到某一自己指定的頁面。它主要用來在?業務處理之前進行控制.
? ? ? ? 2,filter 流程是線性的, url傳來之后,檢查之后,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理之后,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。
? ? ? ? ?filter可用來進行字符編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等
? ? ? ? 3, servlet,filter都是針對url之類的,而listener是針對對象的操作的,如session的創建,session.setAttribute的發生,在這樣的事件發生時做一些事情。
???? 可用來進行:Spring整合Struts,為Struts的action注入屬性,web應用定時任務的實現,在線人數的統計等
?
? ? ? ?4,interceptor 攔截器,類似于filter,不過在struts.xml中配置,不是在web.xml,并且不是針對URL的,而是針對action,當頁面提交action時,進行過濾操作,相當于struts1.x提供的plug-in機制,可以看作,前者是struts1.x自帶的filter,而interceptor 是struts2 提供的filter.
??? 與filter不同點:(1)不在web.xml中配置,而是在struts.xml中完成配置,與action在一起
??????????????????????????? ( 2? ) 可由action自己指定用哪個interceptor 來在接收之前做事
? ??

? ? ? ? 5,struts2中的過濾器和攔截器的區別與聯系:

? ? ? (1)、攔截器是基于java反射機制的,而過濾器是基于函數回調的。
? ? ? (2)、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器。
? ? ? (3)、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。
? ? ? (4)、攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能。
? ? ? (5)、在Action的生命周期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。

? ? ? ??

? ? ? ? 五、執行流程圖:

? ? ? ? ?1、servlet:

? ? ? ? ? ?

? ? ? ? ? 2、filter:

? ? ? ? ??

? ? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ?3、listener:

? ? ? ? ? ? ?

? ? ? ? ? ?4、interceptor:

? ? ? ? ? ??

? ? ? ? ? ??

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539518.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦系統哪個最好用_袪痘袪痘印哪個產品最好 祛痘印最好用的產品十大推薦...

原標題:袪痘袪痘印哪個產品最好 祛痘印最好用的產品十大推薦痘痘下去了,痘印卻頑固不化。有些痘印如果不及時修復,會留下疤痕和坑。我們真的不敢去想他們。所以有痘印痘印的時候一定要及時使用護膚品,不要在臉上留下什么遺憾&…

python中集合符號,Python 集合符號

Android SDK Manager 無法下載更新,或者更新速度超慢,或者待安裝包列表不顯示解決方法: 轉自 http://www.cnblogs.com/tc310/archive/2012/12/21/2828450.html http://jingyan.baidu.com/artic ...AJAX學習AJAX即“Asynchronous Javascript And XML”(異…

五阿哥鋼鐵電商平臺Docker容器云平臺建設實踐——你想知道的都在這里!

前言 五阿哥鋼鐵電商平臺(www.wuage.com)是由鋼鐵行業第一的中國五礦與互聯網第一的阿里巴巴聯手打造,并充分運用雙方股東優勢資源,即:阿里巴巴在大數據、電商運營、互聯網產品技術上的巨大優勢,尤其是在B2…

oracle數據導入導出

一、exp/imp與expdp/impdp的區別 1:把用戶usera的對象導到用戶userb,用法區別在于fromuserusera touseruserb ,remap_schemausera:usera 。例如 imp system/passwd fromuserusera touseruserb file/oracle/exp.dmp log/oracle/exp.log; impdp system/passwd directo…

web瀏覽器_Web上的分享(Share)API

我認為Web Share API非常酷,簡而言之,它會利用您所使用的平臺上的原生共享功能(如果該平臺支持的話)。我喜歡這個:在iOS上激活的Web Share API遠遠不止這些東西:為什么?Web Share API只是幾行代碼。簡單!沒…

Oracle視圖添加約束,Oracle創建視圖的語法

Oracle創建視圖的語法導讀:就愛閱讀網友為大家分享了多篇關于 "oracle 創建序列語法" 資料,內容精辟獨到,非常感謝網友的分享,希望從中能找到對您有所幫助的內容。相關資料一 : Oracle 創建視圖的語法Oracle 創建視圖的…

linux壓縮和解壓縮命令

tar命令解包:tar zxvf FileName.tar打包:tar czvf FileName.tar DirNamegz命令解壓1:gunzip FileName.gz解壓2:gzip -d FileName.gz壓縮:gzip FileName.tar.gz 和 .tgz解壓:tar zxvf FileName.tar.gz壓縮&a…

【Java進階】Java Lambda 表達式、Stream API完整梳理

一、Lambda表達式 Lambda 表達式是一種匿名函數,它可以用來定義函數式接口的實現。Lambda 表達式可以用來簡化代碼,提高代碼的可讀性和可維護性。 1、Lambda 表達式 1.1、語法介紹 Lambda 表達式的語法如下: (parameters) -> express…

使用T-SQL語句操作數據表-刪除數據

1.使用 delete 語句刪除表中的數據&#xff1a;語法&#xff1a;delete from <表名> [where <刪除條件>]delete 是刪除的意思 where是選填內容可以不加&#xff0c;但是不加條件的話是刪除整個表 例子&#xff1a;delete from 成績表 where 姓名張三含義&#xff1…

Oracle expdp/impdp導出導入命令及數據庫備份

經常報錯&#xff1a; ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-29283: invalid file operation ORA-06512: at "SYS.UTL_FILE", line 536 ORA-29283: invalid file operation 解決方法&#xff1a; 1、 CREATE OR REPLACE DI…

exfat單元分配要設置多少_微軟宣布,支持往Linux內核里添加exFAT存儲了!跨系統存儲的福音...

栗子 發自 凹非寺 量子位 報道 | 公眾號 QbitAIexFAT&#xff0c;是微軟開發的文件系統&#xff0c;為閃存而生。你的U盤、SD卡、手機等等存儲設備&#xff0c;能存4G以上的大文件&#xff0c;很大程度上是它的功勞。可exFAT一直是專有的&#xff0c;微軟手握多項專利。所以&am…

在linux中安裝oracle中文包,在Linux命令行下安裝Oracle 10g

Oracle 10g支持在命令行下用靜默模式(Silent)安裝&#xff0c;給那些沒有安裝圖形界面的Linux系統提供了極大的便利。下面以Fedora Core 6為例&#xff0c;介紹在命令行下安裝OracleOracle 10g的方法。1 安裝前的準備準備工作要用登錄為root用戶來進行。1.1 選擇安裝環境的語言…

Jetbrains 系 IDE 編輯器的代碼提示功能

著名的 Jetbrains 可謂編程界的一大福音&#xff0c;眾多有名代碼編輯器比如 ItelliJ IDEA、PHPStorm、WebStorm、PyCharm 等&#xff0c;均出自這家公司麾下。 對于中國的Java開發者來說&#xff0c;可能使用 Eclipse 的人最多。 使用Idea的程序員也不少, 而且每個人都在鼓吹其…

Oracle下的Databse,Instance,Schemas

1、DATABASE&#xff0c;對oracle而言&#xff0c;是指物理上的數據庫&#xff0c;一般你安裝了一個oracle的數據庫軟件后&#xff0c;就是一個database。 2、instance&#xff0c;在同一個數據庫上&#xff0c;可以建立多個實例&#xff0c;這些實例互相不干擾&#xff0c;每個…

oracle實驗數據庫和表,1oracle創建數據庫和表.doc

1oracle創建數據庫和表.doc實驗一&#xff1a;創建數據庫和表一、實驗目的1. 掌握使用DBCA創建數據庫2. 掌握手工創建Oracle數據庫的方法3. 掌握創建數據表的方法二、實驗內容及步驟1. 使用DBCA創建數據庫(1) 打開DBCA組件,創建數據庫sale.(2) 安裝完后進入D:\oracle\product\1…

tkmybatis 子查詢_真假童子命符箓道長教你如何查詢

童子命查詢方法一&#xff1a;童子命在相術里&#xff0c;指的是一生都霉運連連如過本命年的人。古代關于真童子命查詢有口訣“春秋甲寅子&#xff0c;冬夏卯未辰&#xff1b; 金木乙卯未&#xff0c;水火庚辛壬&#xff1b; 土命逢辰巳&#xff0c;童子定為真”解釋上面的口訣…

使用 nvm 安裝 nodejs 和 npm

使用 nvm 可以方便的進行 nodejs 的安裝和版本管理。其實最開始使用的是 n 命令&#xff0c;命令簡潔到極致了&#xff0c;無奈總是安裝不成功&#xff0c;往往下載一部分就報 curl 錯誤。然后又找到這個 nvm&#xff0c;配合淘寶源&#xff0c;簡單快捷&#xff5e; 1.到 nvm …

ECLIPSE配置OSGI服務器

eclipse版本如下&#xff1a; Eclipse Java EE IDE for Web Developers. Version: Mars Release (4.5.0) Build id: 20150621-1200 ------------------------ 1、進入eclipse-----run----run configuration---osgi framework---new 2、取消全選 3、在搜索框中輸入 osgi&a…

oracle ebs r12財務月結基礎講座20090823,095921_OracleEBSR12財務月結基礎講座20090823課件.ppt...

095921_OracleEBSR12財務月結基礎講座20090823課件2009年8月23日方亞兵、鞏學偉;1、月結概述 1.1)月結與對帳 1.2)子模塊與總帳之間的關系 1.3)關帳順序2、各模塊詳細結帳流程及對帳 2.1)應付 2.2)采購 2.3)庫存 2.4)應收 2.5)資產 2.6)PAC 2.7)總帳3、應收模塊業務規則介紹4、…

AD19 add pins to nets錯誤_為什么我認為Rust的Result錯誤處理方式不如Exception

由于是對技術的個人評判&#xff0c;歡迎理性討論。我曾經也當過純函數式的腦殘粉&#xff0c;認為宇宙第一棒的代數數據結構用來處理錯誤&#xff0c;是無上的優雅和絕對的安全。一個看似人畜無害的接口拋出異常帶來的崩潰&#xff0c;是各類疑難雜癥的罪魁禍首。綜合起來&…