Struts2的攔截器體系是一種AOP設(shè)計哲學(xué)。Strut2的攔截器可以動態(tài)地攔截發(fā)送到指定Action的請求,通過攔截器機制,可以在Action執(zhí)行前后插入某些代碼,通過這種方式可以把多個Action中需要重復(fù)指定的代碼提取出來,在攔截器中定義,從而提供更好的代碼重用。攔截器體系是Struts2的一個重要組成部分,Struts2框架就是由大量的內(nèi)置攔截器來實現(xiàn)的。另外,它是即插即用的,即當我們需要使用某個攔截器時,只需要在配置文件中應(yīng)用中該攔截器即可,如果不需要使用攔截器,也只需要取消在配置文件中該攔截器,不管是否應(yīng)用某個攔截器,對于整個Strut2框架不會有任何影響的。
Struts框架提供了很多攔截器,它實現(xiàn)Struts2的大部分功能,能滿意大部分應(yīng)用的能用功能,但要實現(xiàn)系統(tǒng)邏輯相關(guān)的功能時,需要使用用戶自定義攔截器:
如果用戶要開發(fā)自己的攔截類,需要實現(xiàn)Interceptor接口,它包括三個方法:
Init()
destroy()
intercept(ActionInvocation action)
一般來說只需要實現(xiàn)最后一個方法即可,所以Struts2提供了一個AbstractInterceptor類,它提供了init和destory方法的空實現(xiàn)。在實際的開發(fā)中時,只需要繼承AbstractInterceptor來實現(xiàn)自定義攔截器。下面實現(xiàn)一個簡單的攔截器:
實現(xiàn)攔截器類(SimpleInterceptor.java):





















































這樣即實現(xiàn)一個簡單的攔截器,默認下,譔攔截器攔截了Action中的所有方法,如果我們只需要攔截某個方法,Struts2提供了一個MethodFilterInterceptor類對Action中方法過濾的功能,MethodFilterInterceptor是AbstractInterceptor類的子類,如果要實現(xiàn)攔截器方法過濾功能,則需要繼承MethodFilterInterceptor。用戶只需要重寫MethodFilterInteceptor中的doInterceptor(ActionInvocation action)即可。其內(nèi)容實際上與interceptor一樣。
為了實現(xiàn)方法過濾只需要在interceptor的配置文件里設(shè)置兩個屬性:
excludeMethods:指定不需要攔截的方法名
includeMethods:指定需要攔截的方法名
若一個方法同時出現(xiàn)中,則該方法將被攔截。
一個方法過濾的攔截器實現(xiàn)(SimpleInterceptor.java)與上面的一樣:





























配置方法過濾攔截器(Struts.xml):


























