最近因為需要,要求jsp頁面可以直接呼叫strus1.2中action的方法,首先google了一下,看到乙個struts1-annotation外掛程式可以達到需要,又抽時間研究了一下struts1.2的原始碼,自己實現了一種直接在方法上面加註解的方式,記錄如下
一、利用struts-annotation外掛程式的實現
,並引入專案
這個外掛程式可以將struts-config.xml中的action配置全部以註解的形式實現:
@strutsaction(name = "loginform", path = "/xflogin", cancellable = true, scope = "request")
public class loginaction extends dispatchaction
需要在struts-config.xml的標籤中新增標籤:
外掛程式具體如何使用,大家可以自己搜尋檢視用法,在此只研究方法的直接呼叫。該外掛程式本身已經實現了由前台直接呼叫後台方法,但是沒有放出來,需要進行小小的改造,具體操作如下
引數,並實現get/set方法。
2、在org.easy.struts.anno.strutsaction註解類中新增新的屬性 :string parameter() default "";
3、在org.easy.struts.action.strutsannotationsplugin類中(大概74行)仿照其它屬性的新增方式新增:
4、在action的類註解中新增parameter屬性,值為method:
@strutsaction(name = "loginform", path = "/xflogin",parameter="method",
cancellable = true, scope = "request")
public class loginaction extends dispatchaction
測試:jsp:
action,新增一方直接呼叫的方法:
注意:方法中必須包含這四個引數且順序固定,並且前台呼叫的方法和後台的方法名必須一樣。
該外掛程式對於只想直接從前台呼叫後台方法,並不想修改struts-config.xml配置檔案到後台註解的同學,並不十分方便,遂研究了一下struts1的action原始碼,發現可以通過改造requestprocessor類來實現。
二、自定義方法註解
1、新建乙個註解類,並新增乙個屬性,類名、屬性自定義
2、新建乙個控制器類,繼承自org.apache.struts.action.requestprocessor,並重寫方法
3、在struts-config.xml的標籤中新增指向自定義控制器類的標籤:
測試:jsp:
說明:1、前台呼叫的方法名只要等於後台註解方法名即可(@postmethod(invokemethod="testmethod"))
3、我已經實現了直接返回string、jsonobect、jsonarray型別的資料,如果有需要,大家可以根據自己的需要,接著實現直接返回自己需要的型別:
結束
學習筆記 struts1中action的使用方法
1.完整的action name someform input somejsp.jsp 首先,actionservlet接收到請求後,取得action類例項,呼叫execute 方法 然後根據返回的actionforward在配置中找forward,forward到指定的uri或action。這樣做...
struts1 x的Action執行緒安全問題
最近在幾個專案發現了struts 1.x的乙個安全性問題是值得注意的。以前一直沒有在意。因為過去的模式是前台頁面資料通過actionform傳入,action中的excute方法接收,這個問題是不存在的。但是,如果在action 中直接定義例項變數,問題就很大了。原因其實也很簡單 為了確保執行緒安全...
Struts的action跳轉大全
struts的 action 跳轉 1 完整的action name someform input somejsp.jsp 首先,struts 的actionservlet 接收到乙個請求,然後根據 struts config.xml 的配置定位到相應的 對映 接下來如果 form 的範圍是 req...