一個關於Struts Action的小框架, 請高手指點一下
首先是一個基類BaseAction
=================================================================
public class BaseAction extends ActionSupport {
/** 簡單的得到spring bean的方法*/
public Object getBean(String beanName) {
return this.getWebApplicationContext().getBean(beanName);
}
/** 由子類Action物件呼叫, 可以在初始化時反射自身的結構, 形成一個對映, 用來日後dispatchSubaction.
*
* @return 存放了methods物件的Map
*/
protected Map getMethodMap() {
......
}
/** 將Action轉移給子動作.
* 在子類中呼叫時,只需要新建一個Object[] {引數1, 引數2, ...} 一般為 {form, request, dao}
* 然後呼叫dispatchSubAction(String, objects) 即可
*
* @param action 字串,決定子動作的方法名
* @param objs 引數物件列表
* @param methods 由getMethodMap得到的Map
* @return 用來findForward的別名
*/
protected String dispatchSubAction(String action, Object[] objs, Map methods) throws Exception {
......
}
之後是子類的寫法:
================================================================
public class SomeAction extends BaseAction {
protected Map methods = getMethodMap(); //各執行緒公用
//--------- 下面是此Action中公用的一些物件,執行緒安全?
XxxDAO xxxDao=(XxxDAO) getBean("xxxDao");
XxxService xxxService = (XxxService) getBean("xxxService");
public ActionForward execute(......) throws Exception {
// ===================== 初始化環境 ===================== \\
XxxForm form = (XxxForm) actionForm;
ActionErrors errors = new ActionErrors();
// ==================== 獲取使用者引數 ==================== \\
//主要是進行資料轉換如:form.setXxx() = form.getXxx().split("..");
// ==================== 呼叫業務邏輯 ==================== \\
Object[] params = {form, request, errors};
//這裡的params要和下面定義的所有子程式的引數對應起來
String forward = dispatchSubAction(form.getSubaction(), params, methods);
// ==================== 設定回傳引數 ==================== \\
saveErrors(request,errors);
return mapping.findForward(forward);
}
//所有的子程式的引數宣告都應該相同, 但是每個Action可以根據自己的情況有所區別
public String show(MonthDayExecuteForm form, HttpServletRequest request, ActionErrors errors) {
......
return "show";
}
public String edit(MonthDayExecuteForm form, HttpServletRequest request, ActionErrors errors) {
......
return "edit";
}
public String save(MonthDayExecuteForm form, HttpServletRequest request, ActionErrors errors) {
......
return "show";
}
}
================================================================
歸納:我知道struts有lookupDispatchAction,1.2還有MappedAction,但是那些東西使用起來都不太方便。
1. 有的需要在MessageResources裡面進行Submit按鈕文字定義。
2. 有的需要在config中有特殊的配置
3. 必須使用和execute完全相同的冗長的函式宣告
4. 各方法之間沒有交集,難以實現統一的log處理,程式碼重複寫的太多,例如一個簡單的XxxForm form = (XxxForm) actionForm; 就必須寫在所有的子方法中。
不知道我這樣做能不能較好的解決上面的問題?雖然會帶來一些初始化的負擔,但是實際執行時應該不會怎麼影響效率。我主要關心的是,這個結構還可不可以最佳化?另外有沒有什麼安全/效率方面的硬傷?望高手們多多指點!
=================================================================
public class BaseAction extends ActionSupport {
/** 簡單的得到spring bean的方法*/
public Object getBean(String beanName) {
return this.getWebApplicationContext().getBean(beanName);
}
/** 由子類Action物件呼叫, 可以在初始化時反射自身的結構, 形成一個對映, 用來日後dispatchSubaction.
*
* @return 存放了methods物件的Map
*/
protected Map getMethodMap() {
......
}
/** 將Action轉移給子動作.
* 在子類中呼叫時,只需要新建一個Object[] {引數1, 引數2, ...} 一般為 {form, request, dao}
* 然後呼叫dispatchSubAction(String, objects) 即可
*
* @param action 字串,決定子動作的方法名
* @param objs 引數物件列表
* @param methods 由getMethodMap得到的Map
* @return 用來findForward的別名
*/
protected String dispatchSubAction(String action, Object[] objs, Map methods) throws Exception {
......
}
之後是子類的寫法:
================================================================
public class SomeAction extends BaseAction {
protected Map methods = getMethodMap(); //各執行緒公用
//--------- 下面是此Action中公用的一些物件,執行緒安全?
XxxDAO xxxDao=(XxxDAO) getBean("xxxDao");
XxxService xxxService = (XxxService) getBean("xxxService");
public ActionForward execute(......) throws Exception {
// ===================== 初始化環境 ===================== \\
XxxForm form = (XxxForm) actionForm;
ActionErrors errors = new ActionErrors();
// ==================== 獲取使用者引數 ==================== \\
//主要是進行資料轉換如:form.setXxx() = form.getXxx().split("..");
// ==================== 呼叫業務邏輯 ==================== \\
Object[] params = {form, request, errors};
//這裡的params要和下面定義的所有子程式的引數對應起來
String forward = dispatchSubAction(form.getSubaction(), params, methods);
// ==================== 設定回傳引數 ==================== \\
saveErrors(request,errors);
return mapping.findForward(forward);
}
//所有的子程式的引數宣告都應該相同, 但是每個Action可以根據自己的情況有所區別
public String show(MonthDayExecuteForm form, HttpServletRequest request, ActionErrors errors) {
......
return "show";
}
public String edit(MonthDayExecuteForm form, HttpServletRequest request, ActionErrors errors) {
......
return "edit";
}
public String save(MonthDayExecuteForm form, HttpServletRequest request, ActionErrors errors) {
......
return "show";
}
}
================================================================
歸納:我知道struts有lookupDispatchAction,1.2還有MappedAction,但是那些東西使用起來都不太方便。
1. 有的需要在MessageResources裡面進行Submit按鈕文字定義。
2. 有的需要在config中有特殊的配置
3. 必須使用和execute完全相同的冗長的函式宣告
4. 各方法之間沒有交集,難以實現統一的log處理,程式碼重複寫的太多,例如一個簡單的XxxForm form = (XxxForm) actionForm; 就必須寫在所有的子方法中。
不知道我這樣做能不能較好的解決上面的問題?雖然會帶來一些初始化的負擔,但是實際執行時應該不會怎麼影響效率。我主要關心的是,這個結構還可不可以最佳化?另外有沒有什麼安全/效率方面的硬傷?望高手們多多指點!
相關文章
- 請高手指點一下啊
- 關於jive的幾個小問題,請高手指點,多謝先。
- 請bang及各位高手指點一下
- 工作流問題,請高手指點一下!
- 關於學習jdon框架cache的疑問,請banq老師指點一下。框架
- 一個困擾我三天的問題,請高手指點!(關於SUN實現CachedRowSet 的用法)
- 關於單點登入的若干問題,請高手指教
- 請教一下各位struts高手
- 關於快取的問題,請板橋大哥指點一下快取
- 一個關於Struts傳引數的問題,請高手來看看............
- struts+spring+hibernate搞了一天,總是有Servlet action is not available異常,高手指教一下SpringServletAI
- 問一個小的運算問題,請高手指教!
- 關於Struts框架簡介框架
- 請問 struts框架與其他 框架比較 的缺點框架
- 關於實體Bean的啟用和鈍化,請高手指點!Bean
- 請高手指點
- 關於資料庫中儲存中文的問題,請高手指點資料庫
- 新手安裝struts+jdon+hibernate時的錯誤,請高手指點
- 你好banq,關於JVM請教一下JVM
- 關於PHP 的一點點小分享PHP
- 大家請進!!!我破解了一個小遊戲,但沒有完全破解它,想請高手指點一下!!! (507字)遊戲
- 一個請求在Struts2框架中的處理流程框架
- 求教,請高手指點!
- 關於PostCSS的一點小科普CSS
- 請教高手 關於STRUTS DATASOURCE的問題
- 請問一下關於socket跟頁面請求的問題
- benq,你好!框架中有關 getDataSource()問題請教一下ENQ框架
- 關於struts2 action中map型別屬性的對映型別
- 關於HibernateDaoSupport使用的問題,高手指點
- 關於J2EE安全請高手指教
- 關於redo的幾個小知識點
- JAVAEE框架學習——Struts2——Action API 使用Java框架API
- 關於DIP原則中介面的放置問題,請大家指點一下。
- 請問關於Struts的Indexed屬性的問題Index
- 關於前端框架的一些觀點前端框架
- 關於ASMLib的一個小事,記錄一下ASM
- 關於執行緒的問題,清高手指點執行緒
- 請教:struts中action執行緒安全問題執行緒