Struts2的核心在于它復(fù)雜的攔截器,幾乎70%的工作都是由攔截器完成的。比如我們之前用于將上傳的文件對(duì)應(yīng)于action實(shí)例中的三個(gè)屬性的fileUpload攔截器,還有用于將表單頁(yè)面的http請(qǐng)求參數(shù)設(shè)置成action中對(duì)應(yīng)的屬性的param攔截器等??傊谡麄€(gè)Struts框架中攔截器的作用是相當(dāng)大的,本篇將從以下幾點(diǎn)詳細(xì)介紹下有關(guān)Struts攔截器的內(nèi)容:
攔截器在Struts中的作用
自定義攔截器實(shí)現(xiàn)類
配置攔截器(包含配置默認(rèn)攔截器)
引用攔截器
配置攔截指定方法的攔截器
攔截器的攔截順序
一、攔截器在Struts中的作用
在我們的web.xml中,我們配置了一個(gè)過(guò)濾器,實(shí)現(xiàn)將所有請(qǐng)求交付StrutsPrepareAndExecuteFilter類。一旦接受到任意action的請(qǐng)求,該類會(huì)創(chuàng)建和初始化一個(gè)ActionProxy實(shí)例,它代理了具體的action,在其中我們可以添加任意攔截器在execute方法執(zhí)行之前和之后做一些額外的操作,最終會(huì)調(diào)用該action實(shí)例的execute方法,為用戶返回視圖結(jié)果字符串,然后系統(tǒng)會(huì)根據(jù)該視圖結(jié)果字符串調(diào)取相應(yīng)的視圖頁(yè)面。下圖是攔截器和action之間的關(guān)系:
這是一種典型的AOP思想,當(dāng)我們?cè)赟truts.xml中定義一個(gè)包的時(shí)候,大部分情況下我們會(huì)繼承struts-default文件,所以雖然我們?cè)谧约旱呐渲梦募胁](méi)有手動(dòng)配置任何的攔截器,但是我們創(chuàng)建的action卻被很多攔截器攔截處理,就是因?yàn)閟truts-default中配置的攔截器生效了。Struts中內(nèi)建了很多的攔截器,他們大多被配置在struts-default文件中,詳細(xì)的內(nèi)建攔截器的介紹可以參考官方API,接下來(lái)我們看如何自定義一個(gè)攔截器。
二、自定義攔截器實(shí)現(xiàn)類
想要實(shí)現(xiàn)自己的攔截器類只需要實(shí)現(xiàn) com.opensymphony.xwork2.interceptor.Interceptor.Int