Struts 2之動態方法調用,不會的趕緊來


學習Struts2框架以來為了減少Action 的數量,我們可以使用動態方法進行處理。

動態方法調用(Dynamic Method Invocation,DMI)是指表單元素的Action並不是直接等於某個Action的名稱,而是通過

在Action的名稱中使用感嘆號(!)來標識要調用的方法名稱,格式為actionName! methodName.action。

但是由於動態方法的調用可能會帶來安全隱患(通過URL可以執行Action中的任意方法),所以在確定使用動態方法調用時,

應該確保Action中的所有方法都是普通的,開放的方法。基於這個屬性Struts2提供一個屬性的配置用於禁止調用動態方法。

我們可以在Struts.xml文件中,通過constant元素將屬性struts.enable.DynamicMethodInvocation設置為false。禁止

調用動態方法如:

<constant name="struts.enable.DynamicMethodInvocation" value="false">

下面總結一下method屬性調用不同方法與動態方法調用之間的區別:

如果同一個Action的不同方法要處理的請求使用相同的配置(result等),則使用動態方法調用。

如果不同方法的調用需要不同的配置,那么就要使用action元素的method屬性,為同一個Action配置多個名稱

但使用method屬性會導致配置文件中存在大量的Action配置。

從安全角度出發,建議采用method屬性來實現同一個Action的不同方法處理不同的請求。

 

基於安全性考慮,使用method屬性方式更加安全,但是新的問題隨之而來即隨着Action的逐漸增多,導致在struts.xml文件中存在大量的Action配置。

所以我們可以采取Action中通配符。

在配置<action.../>元素時,需要指定name,class和method屬性,其中name屬性支持通配符,然后可以在class,method屬性中使用表達式。這種使用通配符的方式是另一種形式的動態方法調用。通配符用星號(*)表示,用於配置0個或多個字符串。下面我們以一個完整的實例來實現通配符。

 

 

首先我們創建好web工程並且創建好實體類

 

 其次我們在實體類中定義方法

package cn.lxp.action; import com.opensymphony.xwork2.ActionSupport; public class Book extends ActionSupport { 
  //兩個實體類中的方法都是一樣的
public String add() throws Exception { 
  
return "add"; } public String update() throws Exception { return "update"; } public String list() throws Exception { return "list"; } public String delete() throws Exception { return "delete"; } }

接下來我們就在struts.xml文件中配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <!-- developerment Mode:開發模式以后修改下面配置,不需要重新啟動Tmocat服務器 -->
    <constant name="struts.devMode" value="true" />
    <!-- 創建一個default包,繼承自Struts 2 的struts 2的struts-deafult包 -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="*_*" class="cn.lxp.action.{1}" method="{2}">
        <result name="{2}">/{1}/{2}.jsp</result>
         <result name="success">/index.jsp</result>
        </action>

    </package>

</struts>    

然后我們做好相關jsp頁面測試即可

 

 最后啟動tomcat服務器在瀏覽器地址欄中訪問即可

 

 這樣動態方法就調用成功了,你會了么?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM