Struts2攔截器

strut2工作原理

(1)在web.xml中配置一個(gè)struts過濾器StrutsPrepareAndExecuteFilter霸妹,對(duì)后綴為.action的請(qǐng)求進(jìn)行過濾

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

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

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

攔截器概念:

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

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

攔截器工作原理:

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

自定義攔截器的方法:

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

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

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

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

(2)繼承AbstractInterceptor類

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

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

攔截器示例:

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

實(shí)現(xiàn)步驟:

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

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

代碼實(shí)現(xiàn):

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

創(chuàng)建攔截器:創(chuàng)建一個(gè)AbstractInterceptor的實(shí)現(xiàn)類含友,實(shí)現(xiàn)intercept方法替裆,我創(chuàng)建的InterceptorDemo

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

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

params攔截器:負(fù)責(zé)將請(qǐng)求參數(shù)設(shè)置為Action參數(shù)

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

servletConfig攔截器:Servlet API的各種對(duì)象注入到Action窘问,必須實(shí)現(xiàn)對(duì)應(yīng)接口

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

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

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

struts-default.xml文件

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

在struts-default.xml文件中有一個(gè)如上所示的攔截器棧混埠,這個(gè)攔截器棧引用在怠缸、了這些攔截器,引用順序就是它們?cè)跀r截器棧中的排列順序

還有一個(gè)如下所示的默認(rèn)引用的攔截器棧钳宪,這個(gè)攔截器棧默認(rèn)都會(huì)被引用

只要在定義包的過程中繼承struts-default包揭北,那么defaultStack將是默認(rèn)的攔截器扳炬,但是當(dāng)包中的某個(gè)action顯式指定了某個(gè)攔截器,則默認(rèn)攔截器不會(huì)騎作用搔体。值得注意的是恨樟,攔截器棧中的各個(gè)攔截器的順序很重要。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疚俱,一起剝皮案震驚了整個(gè)濱河市劝术,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呆奕,老刑警劉巖养晋,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異登馒,居然都是意外死亡匙握,警方通過查閱死者的電腦和手機(jī)咆槽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門陈轿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秦忿,你說我怎么就攤上這事麦射。” “怎么了灯谣?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵潜秋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我胎许,道長(zhǎng)峻呛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任辜窑,我火速辦了婚禮钩述,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穆碎。我一直安慰自己牙勘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布所禀。 她就那樣靜靜地躺著方面,像睡著了一般。 火紅的嫁衣襯著肌膚如雪色徘。 梳的紋絲不亂的頭發(fā)上恭金,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音褂策,去河邊找鬼横腿。 笑死床蜘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔑水。 我是一名探鬼主播邢锯,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼搀别!你這毒婦竟也來了丹擎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤歇父,失蹤者是張志新(化名)和其女友劉穎蒂培,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榜苫,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡护戳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了垂睬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳荒。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖驹饺,靈堂內(nèi)的尸體忽然破棺而出钳枕,到底是詐尸還是另有隱情,我是刑警寧澤赏壹,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布鱼炒,位于F島的核電站,受9級(jí)特大地震影響蝌借,放射性物質(zhì)發(fā)生泄漏昔瞧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一菩佑、第九天 我趴在偏房一處隱蔽的房頂上張望自晰。 院中可真熱鬧,春花似錦擎鸠、人聲如沸缀磕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袜蚕。三九已至,卻和暖如春绢涡,著一層夾襖步出監(jiān)牢的瞬間牲剃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工雄可, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凿傅,地道東北人缠犀。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像聪舒,于是被迫代替她去往敵國(guó)和親辨液。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Struts2的核心在于它復(fù)雜的攔截器箱残,幾乎70%的工作都是由攔截器完成的滔迈。比如我們之前用于將上傳的文件對(duì)應(yīng)于ac...
    Single_YAM閱讀 569評(píng)論 0 6
  • 攔截器是Struts2框架的核心,它主要完成解析請(qǐng)求參數(shù)被辑、將請(qǐng)求參數(shù)賦值給Action屬性燎悍、執(zhí)行數(shù)據(jù)校驗(yàn)、文件上傳...
    重山楊閱讀 3,956評(píng)論 2 13
  • 自定義攔截器: 從struts2的apps中拷貝相應(yīng)jar包 然后建struts2項(xiàng)目 加入到buildpath ...
    你能不能別說話閱讀 296評(píng)論 0 0
  • “福伯盼理,我來了谈山,昨晚上回顧了一下前端時(shí)間的修煉,還有又自己看了一下國(guó)際化方向的資料宏怔,嘿嘿奏路,又有學(xué)習(xí)修煉的沖動(dòng)了【儆矗”...
    Went_Gone閱讀 434評(píng)論 0 2
  • 概述 什么是Struts2的框架Struts2是Struts1的下一代產(chǎn)品思劳,是在 struts1和WebWork的...
    inke閱讀 2,263評(píng)論 0 50