1. 程式人生 > >Servlet、過濾器、監聽器、攔截器的區別

Servlet、過濾器、監聽器、攔截器的區別

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

         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攔截器是動態攔截Action呼叫的物件。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的程式碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中攔截器用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。

        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:

            

相關推薦

過濾器監聽器攔截區別

  通常來說,使用者通過瀏覽器發起Request進入伺服器後側處理順序如下 Client -> Listener -> ServletContainer -> Filter -> Servlet -> Interceptor

從零學springboot—— servlet,過濾器監聽器攔截

自定義servlet @WebServlet(urlPatterns = "/myServlet/*") public class MyServlet extends HttpServlet { @Override protected void doGet(Http

springBoot(6)---過濾器監聽器攔截

問控制 href tps mvc 添加 rgs single wrap 場景 過濾器,監聽器,攔截器 一、理解它們 看裏十幾篇博客,總算有點小明白,總的來講,兩張圖可以讓我看明白點。 通過兩幅圖我們可以理解攔截器和過濾器的特點 1、過濾器

springBoot的過濾器監聽器攔截

概述   在開發中,我們經常要考慮一些問題,對敏感詞進行過濾,使用者是否已經登入,是否需要對他的請求進行攔截,或者領導問現在線上人數有多少人?我們如何實現這些功能哪  @WebFilter package com.xmlxy.firstspringbootproject; imp

Servlet過濾器監聽器攔截

概念 Servlet   Servlet是一種運行於伺服器端的Java應用程式,具有獨立於平臺和協議的特性,並且可以動態的生成Web頁面,它工作在客戶端請求與伺服器響應的中間層,具有跨平臺與可移植性強等優點。 Filter   Filter是一個

java中攔截過濾器監聽器區別

一、攔截器         interceptor:java裡的攔截器是動態攔截Action呼叫的物件。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的程式碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的

SpringBoot配置過濾器監聽器攔截

一:配置過濾器1.建立TestFilter類並實現Filter介面@WebFilter(filterName="testFilter",urlPatterns="/*") //@WebFilter是定義過濾器的註解 ,urlPatterns="/*" 定義過濾器過濾的路徑

過濾器攔截區別使用場景筆記整理

①攔截器是基於java的反射機制的,而過濾器是基於函式回撥。   ②攔截器不依賴與servlet容器,過濾器依賴與servlet容器。   ③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。   ④攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。

過濾器 監聽器 攔截 區別

過濾器,監聽器,攔截器 過濾器:主要的用途是過濾字元編碼,做一些業務邏輯判斷,隨你的web應用啟動而啟動,只初始化一次,以後就可以攔截相關的請求,只有當你的web應用停止或者重新部署的時候才能銷燬。 監聽器:主要作用:做一些初始化的內容新增工作、設定一些基本的內容,比如一些引數或者是一些固定

過濾器過濾器鏈呼叫原理與順序過濾器配置細節過濾器過濾型別

過濾器鏈呼叫原理與順序: web伺服器根據Filter在web.xml檔案中的註冊順序,決定先呼叫哪個Filter,當第一個Filter的doFilter方法被呼叫時,web伺服器會建立一個代表Filter鏈的FilterChain物件傳遞給該方法。在doFilter

總結過濾器 監聽器 攔截區別

1.過濾器 Servlet中的過濾器Filter是實現了javax.servlet.Filter介面的伺服器端程式,依賴於servlet容器,主要的用途是過濾字元編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml檔案配置好要攔截的客戶端請求,它都會幫你攔截到請

監聽器攔截復習

index.jsp onf replace 客戶端 microsoft struts2 destroy 攔截器 servle 監聽器(Listener) 監聽器是一個接口,具體內容由我們來實現,監聽器的實現用了觀察者模式,我們實現的具體監聽器就是觀察者 JavaWeb中

Servlet過濾器監聽器

過濾器 作用:對伺服器資源進行統一處理; 如:設定編碼格式,session管理、許可權管理、和諧詞彙 使用: 建立一個實現了Filter介面 的普通java類 覆寫Filter介面的方法       init方法:伺服器啟

過濾器攔截區別,action萬用字元配置,struts2資料驗證

過濾器filter與攔截器interceptor區別: 1)filter基於回撥函式,interceptor基於java自身反射機制 2)filter依賴於servlet容器,interceptor與servlet容器無關 3)filter過濾範圍更大,intercept

Servlet過濾器監聽器攔截區別

下面從幾個方面闡述一下題目中四個概念的區別與聯絡:         1、概念         2、生命週期         3、職責         4、執行過程         一、概念:         1、servlet:servlet是一種執行伺服器端的java應用程

servlet過濾器監聽器struts2攔截區別

1.過濾器 Servlet中的過濾器Filter是實現了javax.servlet.Filter介面的伺服器端程式,主要的用途是過濾字元編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml檔案配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求

過濾器/攔截/監聽器 —— FilterInterceptorListener

在服務器 jsp ext resp 應用 改變 每次 常用 fff 一、Filter的功能 filter功能,它使用戶可以改變一個 request和修改一個response. Filter 不是一個servlet,它不能產生一個response,它能夠在一個request到

攔截過濾器監聽器各有什麼作用?

這裡是修真院後端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析後端知識/技能,本篇分享的是: 【攔截器、過濾器、監聽器各有什麼作用?】   大家好,我是IT修真院鄭州分院第

攔截過濾器監聽器總結

1.過濾器(Filter): 所謂過濾器顧名思義是用來過濾的,Java的過濾器能夠為我們提供系統級別的過濾,也就是說,能過濾所有的web請求, 這一點,是攔截器無法做到的。在Java Web中,你傳入的request,response提前過濾掉一些資訊,或者提前設

過濾器監聽器攔截各自的應用場景

過濾器 監聽器 public interface HttpSessionListener extends EventListener { public void sessionCreated ( HttpSessionEvent se );