中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

servlet/filter/listener/interceptor區別與聯系是什么

發布時間:2022-03-23 14:09:07 來源:億速云 閱讀:145 作者:iii 欄目:web開發

本篇內容介紹了“servlet/filter/listener/interceptor區別與聯系是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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

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

 1、概念

     2、生命周期

     3、職責

     4、區別

     5、執行流程圖

一、概念:

  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的實例(如果你設置<load-on-startup>的值是一個大于0的數,則tomcat在啟動時就會創建servlet,如果沒有設置這個屬性,則是第一次訪問時創建);
    (2). 初始化:web服務器啟動時或web服務器接收到請求時,或者兩者之間的某個時刻啟動。初始化工作有init方法負責執行完成;(init方法只執行一次)
    (3). 調用:從第一次到以后的多次訪問,都是只調用doGet()或doPost()方法;
    (4). 銷毀:停止服務器時調用destroy()方法,銷毀實例。

  servlet/filter/listener/interceptor區別與聯系是什么 image.png

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

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

  3. 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:
    與過濾器十分相似,通過層層攔截,處理用戶的請求和響應。

四、幾個區別:

  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的生命周期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。

“servlet/filter/listener/interceptor區別與聯系是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮北市| 六安市| 胶南市| 堆龙德庆县| 罗定市| 吉安市| 西青区| 铜川市| 万安县| 皮山县| 济南市| 宝坻区| 亳州市| 南部县| 离岛区| 交口县| 湖州市| 邹城市| 城步| 元朗区| 泾源县| 正定县| 隆化县| 乌拉特中旗| 博爱县| 平舆县| 临猗县| 景谷| 南华县| 巴青县| 泰和县| 高邮市| 延边| 高要市| 金山区| 邯郸市| 措勤县| 合肥市| 台中县| 当涂县| 惠水县|