亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系

 更新時(shí)間:2016年11月04日 11:31:23   投稿:lqh  
這篇文章主要介紹了Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系的相關(guān)資料,需要的朋友可以參考下

servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系

一、概念

1.servlet:servlet是一種運(yùn)行服務(wù)器端的java應(yīng)用程序,具有獨(dú)立于平臺和協(xié)議的特性,并且可以動(dòng)態(tài)的生成web頁面,它工作在客戶端請求與服務(wù)器響應(yīng)的中間層。

2.filter:filter是一個(gè)可以復(fù)用的代碼片段,可以用來轉(zhuǎn)換HTTP請求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個(gè)請求或者響應(yīng),它只是修改對某一資源的請求,或者修改從某一的響應(yīng)。

3.listener:監(jiān)聽器,從字面上可以看出listener主要用來監(jiān)聽只用。通過listener可以監(jiān)聽web服務(wù)器中某一個(gè)執(zhí)行動(dòng)作,并根據(jù)其要求作出相應(yīng)的響應(yīng)。

通俗的語言說就是在application,session,request三個(gè)對象創(chuàng)建消亡或者往其中添加修改刪除屬性時(shí)自動(dòng)執(zhí)行代碼的功能組件。

4.interceptor:是在面向切面編程的,就是在你的service或者一個(gè)方法,前調(diào)用一個(gè)方法,或者在方法后調(diào)用一個(gè)方法。

比如動(dòng)態(tài)代理就是攔截器的簡單實(shí)現(xiàn),在你調(diào)用方法前打印出字符串(或者做其它業(yè)務(wù)邏輯的操作),也可以在你調(diào)用方法后打印出字符串,甚至在你拋出異常的時(shí)候做業(yè)務(wù)邏輯的操作。

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

二、加載順序

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

三、職責(zé)

1.servlet:

(1)創(chuàng)建并返回一個(gè)包含基于客戶請求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的html頁面

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

(3)讀取客戶端發(fā)來的隱藏?cái)?shù)據(jù)

(4)讀取客戶端發(fā)來的顯示數(shù)據(jù)

(5)與其他服務(wù)器資源(包括數(shù)據(jù)庫和java的應(yīng)用程序)進(jìn)行通信

(6)通過狀態(tài)代碼和響應(yīng)頭向客戶端發(fā)送隱藏?cái)?shù)據(jù)。

2.filter:

(1)filter能夠在一個(gè)請求到達(dá)servlet之前預(yù)處理用戶請求,也可以在離開servlet時(shí)處理http響應(yīng)

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

(3)根據(jù)程序需要修改請求和響應(yīng)

(4)在servlet被調(diào)用之后截獲servlet的執(zhí)行。

3.listener:

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

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

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

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

四、區(qū)別

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

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

filter 功能可用來保持流程繼續(xù)按照原來的方式進(jìn)行下去,或者主導(dǎo)流程,而servlet的功能主要用來主導(dǎo)流程??梢詫?Filter 看成是 servlet 的一個(gè)補(bǔ)充(擦屁股的)。

Filter可認(rèn)為是Servlet的一種“變種”,它主要用于對用戶請求進(jìn)行預(yù)處理,也可以對HttpServletResponse進(jìn)行后處理,是個(gè)典型的處理鏈。

它與Servlet的區(qū)別在于:它不能直接向用戶生成響應(yīng)。

完整的流程是:Filter對用戶請求進(jìn)行預(yù)處理,接著將請求交給Servlet進(jìn)行處理并生成響應(yīng),最后Filter再對服務(wù)器響應(yīng)進(jìn)行后處理。

3.匹配規(guī)則

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

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

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

servlet 匹配規(guī)則:當(dāng)一個(gè)servlet匹配成功后就不會在往下去匹配了

精確路徑的匹配:

例子:比如servletA 的url-pattern為 /test,servletB的url-  pattern為 /* ,這個(gè)時(shí)候,如果我訪問的url為http://localhost/test ,

這個(gè)時(shí)候容器就會先 進(jìn)行精確 路徑匹配,發(fā)現(xiàn)/test正好被servletA精確匹配,那么就去調(diào)用servletA,也不會去理會其他的servlet了。

最長路徑的匹配:

例子:servletA的url-pattern為/test/*,而servletB的url-pattern為/test/a/*,此時(shí)訪問http://localhost/test/a時(shí),

容器會選擇路徑最長的servlet來匹配,也就是這里的servletB。

擴(kuò)展匹配:如果url最后一段包含擴(kuò)展,容器將會根據(jù)擴(kuò)展選擇合適的servlet。

例子:servletA的url-pattern:*.action

4.servlet,filter 都是針對 url 之類的,而 listener 是針對對象的操作的,如 session 的創(chuàng)建,session.setAttribute 的發(fā)生,在這樣的事件發(fā)生時(shí)做一些事情。

可用來進(jìn)行:Spring整合Struts,為Struts的action注入屬性,web應(yīng)用定時(shí)任務(wù)的實(shí)現(xiàn),在線人數(shù)的統(tǒng)計(jì)等

5.interceptor 攔截器,類似于filter,不過在struts.xml中配置,不是在web.xml,并且不是針對URL的,而是針對action,當(dāng)頁面提交action時(shí),

進(jìn)行過濾操作,相當(dāng)于struts1.x提供的plug-in機(jī)制,可以看作,前者是struts1.x自帶的filter,而interceptor 是struts2 提供的filter。

與filter不同點(diǎn):

(1)不在web.xml中配置,而是在struts.xml中完成配置,與action在一起
(2)可由action自己指定用哪個(gè)interceptor 來在接收之前做事

6.struts2中的過濾器和攔截器的區(qū)別與聯(lián)系:

(1)攔截器是 Struts2 提供的,而過濾器是由 Servlet 標(biāo)準(zhǔn)提供的

(2)攔截器攔截目標(biāo) Action 的目標(biāo)方法,而過濾器針對各種 web 資源

(3)攔截器在 struts.xml 中配置,而過濾器在 web.xml文件中配置

(4)攔截器使用攔截器棧組織在一起,而過濾器是根據(jù)被攔截的資源聯(lián)系在一起,由他們在配置文件中的位置決定了先后執(zhí)行順序

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

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Jmeter如何基于命令行運(yùn)行jmx腳本

    Jmeter如何基于命令行運(yùn)行jmx腳本

    這篇文章主要介紹了Jmeter如何基于命令行運(yùn)行jmx腳本,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 深入理解Java反射

    深入理解Java反射

    在理解反射原理之前先要搞清類型信息。接下來通過本文給大家介紹java反射的深入理解,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-07-07
  • Java中mkdir()和mkdirs()的區(qū)別及說明

    Java中mkdir()和mkdirs()的區(qū)別及說明

    這篇文章主要介紹了Java中mkdir()和mkdirs()的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • jenkins中如何集成commander應(yīng)用的完整步驟

    jenkins中如何集成commander應(yīng)用的完整步驟

    jenkins是一個(gè)用java編寫的開源的持續(xù)集成工具,在與oracle發(fā)生爭執(zhí)后,項(xiàng)目從hudson項(xiàng)目獨(dú)立出來,下面這篇文章主要給大家介紹了關(guān)于jenkins中如何集成commander應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • SpringBoot2零基礎(chǔ)到精通之自動(dòng)配置底層分析及小技巧

    SpringBoot2零基礎(chǔ)到精通之自動(dòng)配置底層分析及小技巧

    SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)自動(dòng)配置的底層分析與一些開發(fā)中的小技巧
    2022-03-03
  • Spring Boot集成springfox-swagger2構(gòu)建restful API的方法教程

    Spring Boot集成springfox-swagger2構(gòu)建restful API的方法教程

    這篇文章主要給大家介紹了關(guān)于Spring Boot集成springfox-swagger2構(gòu)建restful API的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • Spring中的@Autowired注解深入解析與實(shí)戰(zhàn)指南

    Spring中的@Autowired注解深入解析與實(shí)戰(zhàn)指南

    本文介紹了Spring框架中的@Autowired注解,詳細(xì)講解了其基本用法、高級用法以及實(shí)際應(yīng)用場景,通過@Autowired注解,Spring容器可以自動(dòng)將依賴的Bean注入到目標(biāo)Bean中,從而簡化代碼并提高可維護(hù)性,需要的朋友可以參考下
    2024-11-11
  • Spring學(xué)習(xí)筆記之bean的基礎(chǔ)知識

    Spring學(xué)習(xí)筆記之bean的基礎(chǔ)知識

    ean在Spring和SpringMVC中無所不在,將這個(gè)概念內(nèi)化很重要,所以下面這篇文章主要給大家介紹了關(guān)于Spring學(xué)習(xí)筆記之bean基礎(chǔ)的相關(guān)資料,文中通過示例代碼介紹的非常詳解,需要的朋友可以參考下。
    2017-12-12
  • 使用@JsonFormat的一個(gè)坑及解決

    使用@JsonFormat的一個(gè)坑及解決

    這篇文章主要介紹了使用@JsonFormat的一個(gè)坑及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java?Export大量數(shù)據(jù)導(dǎo)出和打包

    java?Export大量數(shù)據(jù)導(dǎo)出和打包

    這篇文章主要為大家介紹了java?Export大量數(shù)據(jù)的導(dǎo)出和打包實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評論