日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

發布時間:2025/3/12 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JavaWeb中監聽器Listener+過濾器filter+攔截器interceptor區別

如果從整個項目中看,一個servlet請求的執行過程就變成了這樣context-param–>listener–>filter–>servlet–>interceptor(指的是攔截器)

1.概念

context-param:就是一些需要初始化的配置,放入context-param中,從而被監聽器(這里特指org.springframework.web.context.ContextLoaderListener)監聽,然后加載;

監聽器(listener):就是對項目起到監聽的作用,它能感知到包括request(請求域),session(會話域)和applicaiton(應用程序)的初始化和屬性的變化;

過濾器(filter):就是對請求起到過濾的作用,它在監聽器之后,作用在servlet之前,對請求進行過濾;

servlet:就是對request和response進行處理的容器,它在filter之后執行,servlet其中的一部分就是controller層(標記為servlet_2),還包括渲染視圖層(標記為servlet_3)和進入controller之前系統的一些處理部分(servlet_1),另外我們把servlet開始的時刻標記為servlet_0,servlet結束的時刻標記為servlet_4。

攔截器(interceptor):就是對請求和返回進行攔截,它作用在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,不過不是在web.xml,并且不是針對url的而是針對action的,當頁面提交時,進行過濾操作;

使用原則:
對整個流程清楚之后,然后就是各自的使用,在使用之前應該有一個使用規則,為什么這個說,因為有些功能比如判斷用戶是否登錄,既可以用過濾器,也可以用攔截器,用哪一個才是合理的呢?那么如果有一個原則,使用起來就會更加合理。實際上這個原則是有的:

把整個項目的流程比作一條河,那么監聽器的作用就是能夠聽到河流里的所有聲音,過濾器就是能夠過濾出其中的魚,而攔截器則是攔截其中的部分魚,并且作標記。所以當需要監聽到項目中的一些信息,并且不需要對流程做更改時,用監聽器;當需要過濾掉其中的部分信息,只留一部分時,就用過濾器;當需要對其流程進行更改,做相關的記錄時用攔截器。

攔截器這個要詳細講述一下了,上一篇文章說到,Spring的配置文件應該掃描service層及以下,SpringMvc的配置文件應該掃描controller層; 我們在service層如果想做日志的話,可以使用spring aop特性,在spring.xml中配置aspect即可,那么如果想在controller層做日志,相應地,在SpringMvc.xml中應該怎么配置呢?

這個時候就需要攔截器,它其實也是一種aop的實現(aop本身是一種思想),而且這種實現本質上和aspect是一樣的,只是做了更多的事情,我們當然可以在SpringMvc.xml中也配置aspect,不過現在有一個更好的實現,為什么不用呢。

生命周期

1.servlet

servle的生命周期開始于被裝入web服務器的內存中,并在web服務終止或者重新裝入servlet的時候結束;

servlet一旦被裝入web服務器,一般不會從web服務器內存中刪除;直到web服務器關閉;

裝入:啟動服務器時加載servlet的實例;

初始化:web服務器接收到請求時,或者兩者之間的某個時刻啟動,調用init()

調用:從第一次到以后的多次訪問,都只調用doGet()或dopost()方法;

銷毀;停止服務器時調用destroy()方法,銷毀實例;

2.filter

需要實現javax.servlet包的Filter接口的三個方法init(),doFilter(),destroy();

加載:啟動服務器時加載過濾器的實例,并調用init()方法;

調用:每次請求的時候只調用方法doFilter()進行處理;

銷毀:服務器關閉前調用destroy()方法,銷毀實例;

3.listener

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

4.interceptor

加載配置文件后初始化攔截器,當有對action的請求的時候,調用interceptor方法,最后也是根據服務器停止進行銷毀;

執行流程:


參考博客:https://blog.csdn.net/Jintao_Ma/article/details/52972482
https://www.cnblogs.com/heyanan/p/9591670.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。