簡單理解Struts2 action中動態方法及萬用字元
眾所周知,預設條件下,在瀏覽器輸入indexAction!execute.action,便會執行indexAction類裡的execute方法,這樣雖然方便,但可能帶來安全隱患,通過url可以執行Action中的任意方法。
想要禁止呼叫動態方法,則要在struts.xml中通過constant元素將屬性strutsenableDynamicMethodInvocation設定為false,來禁止呼叫動態方法。
<constant
name="strutsenableDynamicMethodInvocation" value="false"/>
method屬性:
這時我們需要通過其他安全的方式來實現動態方法的呼叫
一、通過action元素的method屬性來指定Action執行時呼叫的方法
<action name="empAction_register" class="com.syaccp.erp.action.emp.EmpAction" method="register">
<result name="success">/WEB-INF/jsp/basic/emp_list.jsp</result>
<result name="input_edit">/WEB-INF/jsp/basic/emp_edit.jsp</result>
<result name="input_add">/WEB-INF/jsp/basic/emp_add.jsp</result>
<result name="reload" type="redirect">empAction.action</result>
</action>
以上一個配置片段便用到了method屬性,當請求/empAction_register.action時,Struts2框架會在EmpAction中查詢register方法並執行。
Struts2根據method屬性查詢方法有兩種途徑:
1、查詢與method屬性值完全一致的方法
2、查詢doMethod形式的方法
使用動態方法呼叫和method屬性的區別:
<action name="empAction" class="com.syaccp.erp.action.emp.EmpAction">
<result name="success">/WEB-INF/jsp/basic/emp_list.jsp</result>
<result name="reload" type="redirect">empAction.action</result>
</action>
<action name="empAction_register" class="com.syaccp.erp.action.emp.EmpAction" method="register">
<result name="success">/WEB-INF/jsp/basic/emp_register.jsp</result>
</action>
<action name="empAction_login" class="com.syaccp.erp.action.emp.EmpAction" method="login">
<result name="success">/WEB-INF/jsp/basic/emp_login.jsp</result>
</action>
通過以上三個配置來敘說,這三個配置實質是操作同一個Action。
第一個動態方法模式,通過請求/empAction!register.action或者/empAction!login.action、或者/empAction.action。如果
register方法、login方法、execute方法返回值都是是"success",則都會進入emp_list.jsp頁面。
第二三個通過指定method屬性,動態訪問。這裡register和login方法假設返回都是"success",但它們不會進入同一個頁面,而是分別進入各自result指定的頁面中。
由上我們分析出:
如果同一個Action的不同方法的響應使用相同的的配置(result等),則使用動態方法呼叫
如果同一個Action的不同方法的響應分別使用不同的配置,則使用action元素的method屬性,為同一個Action配置多個名稱。
萬用字元:
在使用method屬性來實現同一個Action的不同方法處理不同的請求時,會發現,隨著方法的增多,從而導致大量的Action配置,這時我們就需要通過使用萬用字元來解決Action配置過多的方法。
在配置<action.../>元素時,需要指定name、class、method屬性。其中name屬性可支援萬用字元,然後可以在class、method屬性中使用表示式。萬用字元用星號 * 表示。
<action name="empAction_*" class="com.syaccp.erp.action.emp.EmpAction" method="{1}">
<result name="success">/WEB-INF/jsp/basic/emp_{1}.jsp</result>
</action>
以上配置表明,當請求/empAction_login時,萬用字元匹配的是login,這個值將替換{1},最終執行EmpAction的login方法,如果方法返回值為success,跳轉到emp_login.jsp頁面。
預設Action:
在瀏覽器輸入一個不存在的Action,頁面將呈現404錯誤,為了網站更友好,我們可以設定一個預設的Action。
設定預設Action有兩種形式:
1、配置每個包的預設Action,如果在相應的namespace下沒有一個Action匹配請求,那麼將執行該namespace預設的Action,不同的包,可配置不同的預設Action,配置如下:defaultAction為預設Action的name屬性值,default語句必須寫在首行。
<package name="default" namespace="/emp" extends="struts-default">
<default-action-ref name="defaultAction"></default-action-ref>
<action name="defaultAction">
<result>/error.jsp</result>
</action>
</package> 2、在根目錄下配置預設Action,不用填寫namespace屬性
<package name="default" extends="struts-default">
<default-action-ref name="defaultAction"></default-action-ref>
<action name="defaultAction">
<result>/error.jsp</result>
</action>
</package>
如果宣告瞭第一種,Struts2將會呼叫當前包下宣告的預設Action。忽視全域性的預設Action。
一般用第二種,統一預設的Action,不論在url中輸入哪個目錄或包下沒有的Action,都顯示錯誤頁面。
原創文章連結:http://www.cnblogs.com/xiaona/p/cd6634b16ea1bd214e6fe232ad987a7e.html
相關文章
- Struts2中Action動態呼叫DMI出現的一個問題
- Struts2 動態方法呼叫(十三)
- 深入理解Redis之簡單動態字串Redis字串
- 動態繫結和靜態繫結的簡單理解
- struts2 action中result引數詳解
- Java泛型(類、介面、方法)及萬用字元Java泛型字元
- Struts2 中jsp直接跳轉到actionJS
- 正規表示式理解及簡單應用舉例
- 05. struts2中為Action屬性注入值
- java方法引數中萬用字元的使用Java字元
- Struts2教程6:在Action類中獲得HttpServletResponse物件的四種方法HTTPServlet物件
- jQuery的萬用字元選擇器簡單介紹jQuery字元
- struts2的異常There is no Action mapped for namespace / and action nameAPPnamespace
- Struts2中攔截器的簡單實現
- 深入理解Redis 資料結構—簡單動態字串sdsRedis資料結構字串
- 單調棧理解及應用
- Redis—簡單動態字串(SDS)Redis字串
- java 動態代理簡單使用Java
- 動態代理竟然如此簡單!
- Action中找不以getDataSource方法
- mybatis條件判斷及動態sql的簡單擴充MyBatisSQL
- 簡單理解動態記憶體分配和靜態記憶體分配的區別記憶體
- Struts2中一個簡單的入門例項
- 封裝動態庫dll與靜態庫lib(原理及簡單例項)封裝單例
- JavaWeb使用Struts2的簡單案例JavaWeb
- struts2檔案下載及 inputStream的理解
- 關於struts2 action中map型別屬性的對映型別
- 【react】實現動態表單中巢狀動態表單React巢狀
- 模擬簡單的動態代理
- redis string 簡單動態字串Redis字串
- Managed DirectX中的DirectShow應用(簡單Demo及原始碼)原始碼
- Node中EventEmitter理解與簡單實現MIT
- 簡單理解Vue中的nextTickVue
- Oracle中coalesce函式的簡單理解Oracle函式
- Struts2 OGNL動態配置result(十八)
- JAVAEE框架學習——Struts2——Action API 使用Java框架API
- (三)struts2進階之實現Action
- Struts2筆記05 action操作域物件筆記物件