Struts2攔截器

strut2工作原理

(1)在web.xml中配置一個struts過濾器StrutsPrepareAndExecuteFilter,對后綴為.action的請求進行過濾

(2).action請求經(jīng)過過濾器后到達ActionMapper中去查找該請求的映射

(3)然后經(jīng)過ActionProxy(action代理)去通過ConfigurationManager(配置管理器)加載核心配置文件struts.xml,找到具體的action類,然后通過ActionInvocation去創(chuàng)建action類的反向?qū)嵗?/p>

(4)通過一系列攔截器后執(zhí)行action返回result后再經(jīng)過一系攔截器到達HttpServletResponse后返回到用戶實例HttpServletRequest

攔截器概念:

攔截器:在Struts2工作過程中,大多數(shù)核心功能是通過攔截器實現(xiàn)的,如數(shù)據(jù)轉(zhuǎn)移,類型轉(zhuǎn)換,數(shù)據(jù)校檢等等,攔截器方法在action執(zhí)行之前或者之后執(zhí)行。

攔截器棧:攔截器棧也是一種攔截器,結(jié)構(gòu)上相當于多個攔截器的組合

攔截器工作原理:

客戶端發(fā)出的請求一次經(jīng)過攔截器1,攔截器2,攔截器3等等,然后執(zhí)行Action中的execute()方法返回一個result,這個result又依次反向經(jīng)過攔截器3,攔截器2,攔截器1后,才開始響應客戶端

自定義攔截器的方法:

(1)實現(xiàn)Interceptor接口

--void init():初始化攔截器所需資源

--void destroy():釋放在init()中分配的資源

--String intercept(ActionInvocation ai) throws Exception:實現(xiàn)攔截器功能,利用ActionInvocation參數(shù)獲取Action狀態(tài),返回result字符串作為邏輯視圖

(2)繼承AbstractInterceptor類

--提供了init()和destroy()方的空實現(xiàn)

--只需實現(xiàn)intercept方法

攔截器示例:

計算Action的執(zhí)行時間:執(zhí)行之后的時間-執(zhí)行之前的時間=執(zhí)行Action消耗的時間

實現(xiàn)步驟:

(1)創(chuàng)建攔截器

(2)在配置文件中定義攔截器并引用它

代碼實現(xiàn):

準備:創(chuàng)建好一個action并在struts.xml文件中配置好,配置好web.xml文件

創(chuàng)建攔截器:創(chuàng)建一個AbstractInterceptor的實現(xiàn)類,實現(xiàn)intercept方法,我創(chuàng)建的InterceptorDemo

在struts.xml中配置攔截器:先注冊,再引用

Struts2內(nèi)建攔截器:

params攔截器:負責將請求參數(shù)設(shè)置為Action參數(shù)

staticParams攔截器:將配置文件中action元素的子元素param參數(shù)設(shè)置Action屬性

servletConfig攔截器:Servlet API的各種對象注入到Action,必須實現(xiàn)對應接口

fileUpload攔截器:對文件上傳提供支持,將文件和元數(shù)據(jù)設(shè)置到對應的action屬性

exception攔截器:捕獲異常,并將異常映射到用戶自定義的錯誤頁面

validation攔截器:調(diào)用驗證框架進行數(shù)據(jù)驗證

struts-default.xml文件

位于struts核心jar包struts-core中,struts啟動前自動加載,里面定義了一個struts-default包,所有自定義的攔截器都要繼承這個包,而且里面定義了許多內(nèi)建的攔截器。那么怎么引用這些攔截器呢?

在struts-default.xml文件中有一個如上所示的攔截器棧,這個攔截器棧引用在、了這些攔截器,引用順序就是它們在攔截器棧中的排列順序

還有一個如下所示的默認引用的攔截器棧,這個攔截器棧默認都會被引用

只要在定義包的過程中繼承struts-default包,那么defaultStack將是默認的攔截器,但是當包中的某個action顯式指定了某個攔截器,則默認攔截器不會騎作用。值得注意的是,攔截器棧中的各個攔截器的順序很重要。

引用攔截器棧的方法和攔截器一樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Struts2的核心在于它復雜的攔截器,幾乎70%的工作都是由攔截器完成的。比如我們之前用于將上傳的文件對應于ac...
    Single_YAM閱讀 636評論 0 6
  • 攔截器是Struts2框架的核心,它主要完成解析請求參數(shù)、將請求參數(shù)賦值給Action屬性、執(zhí)行數(shù)據(jù)校驗、文件上傳...
    重山楊閱讀 4,074評論 2 13
  • 自定義攔截器: 從struts2的apps中拷貝相應jar包 然后建struts2項目 加入到buildpath ...
    你能不能別說話閱讀 445評論 0 0
  • “福伯,我來了,昨晚上回顧了一下前端時間的修煉,還有又自己看了一下國際化方向的資料,嘿嘿,又有學習修煉的沖動了?!?..
    Went_Gone閱讀 493評論 0 2
  • 概述 什么是Struts2的框架Struts2是Struts1的下一代產(chǎn)品,是在 struts1和WebWork的...
    inke閱讀 2,337評論 0 50

友情鏈接更多精彩內(nèi)容