国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java servlet、filter、listener、interceptor之間的區別和聯系

2019-11-26 13:37:04
字體:
來源:轉載
供稿:網友

servlet、filter、listener、interceptor之間的區別和聯系

一、概念

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中。

二、加載順序

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

三、職責

1.servlet:

(1)創建并返回一個包含基于客戶請求性質的動態內容的完整的html頁面

(2)創建可嵌入到現有的html頁面中的一部分html頁面(html片段)

(3)讀取客戶端發來的隱藏數據

(4)讀取客戶端發來的顯示數據

(5)與其他服務器資源(包括數據庫和java的應用程序)進行通信

(6)通過狀態代碼和響應頭向客戶端發送隱藏數據。

2.filter:

(1)filter能夠在一個請求到達servlet之前預處理用戶請求,也可以在離開servlet時處理http響應

(2)在執行servlet之前,首先執行filter程序,并為之做一些預處理工作

(3)根據程序需要修改請求和響應

(4)在servlet被調用之后截獲servlet的執行。

3.listener:

servlet2.4規范中提供了8個 listener 接口,可以將其分為三類,分別如下:

(1)與 servletContext 有關的 listne r接口。包括:ServletContextListener、ServletContextAttributeListener

(2)與 HttpSession 有關的 Listner 接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、 HttpSessionActivationListener

(3)與 ServletRequest 有關的 Listener 接口,包括:ServletRequestListner、ServletRequestAttributeListener

四、區別

1.servlet:servlet 流程是短的,url傳來之后,就對其進行處理,之后返回或轉向到某一自己指定的頁面。它主要用來在業務處理之前進行控制。

2.filter:流程是線程性的,url傳來之后,檢查之后,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而 servlet 處理之后,不會繼續向下傳遞。

filter 功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。可以將 Filter 看成是 servlet 的一個補充(擦屁股的)。

Filter可認為是Servlet的一種“變種”,它主要用于對用戶請求進行預處理,也可以對HttpServletResponse進行后處理,是個典型的處理鏈。

它與Servlet的區別在于:它不能直接向用戶生成響應。

完整的流程是:Filter對用戶請求進行預處理,接著將請求交給Servlet進行處理并生成響應,最后Filter再對服務器響應進行后處理。

3.匹配規則

當一個請求發送到servlet容器的時候,容器先會將請求的url減去當前應用上下文的路徑作為servlet的映射url,比如我訪問的是http://localhost/test/aaa.html(我的應用上下文是test),

容器會將http://localhost/tes去掉,將剩下的/aaa.html部分拿來做servlet的映射匹配,也就是拿這剩下的部分與web.xml中配置的servlet的url-pattern進行匹配。

注意:這個映射匹配過程是有一定的規則的,而且每次匹配最終都只匹配一個 servlet。(這一點和filter不同)

servlet 匹配規則:當一

主站蜘蛛池模板: 瑞安市| 隆昌县| 迁安市| 宜黄县| 河西区| 宝兴县| 常山县| 江油市| 祥云县| 江津市| 韶山市| 连州市| 甘泉县| 逊克县| 陈巴尔虎旗| 泾源县| 韩城市| 武汉市| 巨鹿县| 开封市| 莱阳市| 大荔县| 涿州市| 翼城县| 阳西县| 奇台县| 穆棱市| 新建县| 临泽县| 乌鲁木齐市| 新化县| 南溪县| 石阡县| 盐边县| 始兴县| 金山区| 濮阳市| 泽库县| 招远市| 洞口县| 惠州市|