saif 讓struts1 1中實現AOP

2021-05-01 07:02:24 字數 1809 閱讀 3588

最近做乙個基於struts1.1的專案,需要實現乙個日誌審計的功能,但又不想破壞原有**的內聚行,於是考慮到在sturts1.1中採用aop,但是由於自身缺陷,struts1.1不支援aop,只好網上求助一下外掛程式了,最後採用了saif外掛程式,發現還挺好用,故在此寫個使用方法分享一下。 具體步驟如下:

然後,更改struts的struts-config.xml檔案,將saif以plugin的方式新增到該配置檔案中。

具體新增方法如下:

注意,這裡的中的value值為存放攔截宣告的xml檔名稱。

接下來就是saif的具體使用了,這裡實現的是對每個前台請求都進行攔截並計入資料的操作,對於查詢、新增等一般的操作,通過乙個通用的aop***commoninterceptor進行攔截,對於使用者查詢關鍵字的記錄通過keywordinterceptor***進行攔截。篇幅有限,這裡不再說明前台jsp頁面以及action類的實現,這裡給出使用者查詢關鍵字的請求action為gov.interceptor.keywordqueryaction。 接下來說說saif的aop功能具體實現:

(1)建立與struts-config.xml檔案中set-property中value對應的***配置檔案interceptor-config.xml(這裡也可以以其他名稱命名,只需與struts-config.xml檔案中set-property中value對應即可),在該檔案中的interceptor-config標籤下申明相應的***。如下**,申明了通用的aop***commoninterceptor和使用者查詢關鍵字***keywordinterceptor。其中name屬性為該***定義的別名,以方便以後使

(2)實現具體的攔截類,這裡以 keywordinterceptor為例進行說名,如下**,這裡實現saif的actioninterceptor介面,該介面中定義了beforeaction和afteraction兩個方法,通過這兩個方法可以實現aop思想的around、before和after三種方式的通知(advise),其中只實現beforeaction方法可實現before方式的通知;只實現afteraction方法可實現after方式的通知,同時實現beforeaction方法和afteraction方法可實現around方式的通知。這裡實現了after方式的通知,對於關鍵字的攔截具體實現如下。

(3)接下來就是將***繫結到具體的攔截action類上,如以下**,對於查詢關鍵字的請求action為gov.interceptor.keywordqueryaction採用對應***keywordinterceptor攔截,其中,type值為需要攔截action路徑。對於通用操作,採用預設***攔截,這裡只需要將通用操作***commoninterceptor置於default-interceptors標籤下即可,這裡不需要設定該標籤的type值,因為他會自動攔截每個action請求。

自此,整個interceptor-config.xml配置完成,完成的interceptor-config.xml檔案配置如下。

這裡有幾點需要注意一下:

第一,就是盡量對於每個action都能明確的指出他的***,因為預設***default-interceptors不會考慮當前攔截的action是否之前已被其他***攔截過,仍然會執行一次攔截,這就會導致乙個action被攔截多次,像keywordqueryaction就會被攔截兩次。這樣會導致一些隱含問題的發生。

第二,多個***可以同時攔截乙個action,比如,如果想再針對keywordqueryaction做其他日誌分析,也可以再為其寫乙個keyword***xxinterceptor,其他配置方法如keywordinterceptor,這樣keywordqueryaction就會被多個interceptor攔截,這樣做的好處是能提高每個***的內聚性和可重用性。

struts1 1中的異常應用實踐

struts的異常處理機制帶我們很大的方便。通過思考和自己作例子,覺得以下這種方式較為靈活 首先為你的應用程式定製一套異常類。例如,先定義乙個基類 可以是虛類 注意,在此它擴充套件自runtimeexception,這是為了在struts的action中順利捕獲到。public class base...

11 struts實現國際化

1.在action包中建立資源檔案package en.properties和package zh.properties 2.讓action繼承actionsupport,actionsupport類提供了一些非常常用的方法 3.在jsp頁面中用 代替原來的titile 4.通過加?request ...

Struts中如何用taglib實現下拉選擇筐

前言 我在論壇上看到很多多struts的taglib批評的帖子,估計是大家對taglib的使用還是不熟悉的原因吧 現在特別對taglib中select選擇筐的實現作個解釋 目的是讓大家知道taglib是無比的好用 首先在 listsearchform中定義乙個arraylist set等集合介面 p...