更新時(shí)間:2020-10-23 17:09:49 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1705次
Javaweb是和java框架、服務(wù)器、開發(fā)工具在java中一樣重要的存在,也是java零基礎(chǔ)的新手朋友們首先要接觸學(xué)習(xí)到的內(nèi)容。在javaweb的學(xué)習(xí)階段,需要打好扎實(shí)的基礎(chǔ),javaweb攔截器是初學(xué)者們需要學(xué)習(xí)的內(nèi)容之一,這篇文章來介紹javaweb攔截器是什么以及相關(guān)的基本知識。
Javaweb攔截器是動(dòng)態(tài)攔截Action調(diào)用的對象,它提供了一種機(jī)制可以使開發(fā)者在一個(gè)Action執(zhí)行的前后執(zhí)行一段代碼,也可以在一個(gè)Action執(zhí)行前阻止其執(zhí)行,同時(shí)也提供了一種可以提取Action中可重用部分代碼的方式。在AOP中,攔截器用于在某個(gè)方法或者字段被訪問之前,進(jìn)行攔截,然后再之前或者之后加入某些操作。
Javaweb攔截器的原理:大部分時(shí)候,攔截器方法都是通過代理的方式來調(diào)用的。Struts2的攔截器實(shí)現(xiàn)相對簡單。當(dāng)請求到達(dá)Struts2的ServletDispatcher時(shí),Struts2會(huì)查找配置文件,并根據(jù)配置實(shí)例化相對的攔截器對象,然后串成一個(gè)列表(List),最后一個(gè)一個(gè)的調(diào)用列表中的攔截器。Struts2的攔截器是可插拔的,攔截器是AOP的一個(gè)實(shí)現(xiàn)。Struts2攔截器棧就是將攔截器按一定的順序連接成一條鏈。在訪問被攔截的方法或者字段時(shí),Struts2攔截器鏈中的攔截器就會(huì)按照之前定義的順序進(jìn)行調(diào)用。
在前面的文章中我們學(xué)習(xí)了javaweb三大組件的內(nèi)容,三大組件中的過濾器filter是要和javaweb攔截器做對比學(xué)習(xí)的,攔截器和過濾器的區(qū)別是什么呢?過濾器是對dao請求起到過濾的作用,它在監(jiān)聽器之后,作用在servlet之前,對請求進(jìn)行過濾;攔截器(interceptor)是對請求和返回進(jìn)行攔截,它作用在servlet的內(nèi)部,二者的簡要區(qū)別概括如下:
1、攔截器是基于java的反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)。
2、攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5、在action的生命周期中,攔截器可以多次被調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次。
6、攔截器可以獲取IOC容器中的各個(gè)bean,而過濾器就不行,在攔截器里注入一個(gè)service,可以調(diào)用業(yè)務(wù)邏輯。
以上就是對javaweb攔截器基本概念和相關(guān)基礎(chǔ)知識的介紹,攔截器在java開發(fā)時(shí)是經(jīng)常要使用的工具,也是程序員要掌握的一個(gè)技能,希望這篇文章對javaweb攔截器的介紹,java初學(xué)者能對javaweb攔截器有一個(gè)基本的了解和認(rèn)識,進(jìn)而慢慢學(xué)習(xí)更多攔截器的相關(guān)知識。
初級 202925
初級 203221
初級 202629
初級 203743