Struts2的動態方法引動過程

來源:互聯網
上載者:User

Struts2中可以通過三種方式實現Dynamic Method Invocation
method屬性
頁面中指定
使用萬用字元

第一種:在struts.xml的<action/>中指定method屬性
如果將<action/>中的method屬性設定為method="abc"的話,具體執行過程如下
如果一個<s:form action="login">,那麼就會產生LoginAction類的一個執行個體
接著就會由abc()方法來進行處理表單的請求,而不會自動的調用execute()方法了
而abc()與execute()的寫法是相同的,如public String abc() throws Exception {}
如果沒有method屬性,Struts2就會自動調用LoginAction的execute()方法
很顯然這裡使用到了Java的反射機制,否則也不可能通過方法名來調用方法
這就是在Struts2中通過一個Action來實現多個商務邏輯的方式,它完全對應Struts1.X中的DispatchAction
另外如果Action中僅僅存在doAbc()方法,而不存在abc()方法的話
那麼實際上Struts2仍會根據method="abc"去調用Action中的doAbc()方法
由於在Action中為方法命名時不允許使用關鍵字,所以Struts2為避免為method命名時而誤用關鍵字
所以提供了這種可以調用doXxx()方法的機制。這種機制僅供瞭解,無需深究

第二種:在頁面中指定調用Action類中的具體的方法
在前台頁面中設定成<s:form action="login!hello.action">
在struts.xml中為<action name="login" class="com.jadyer.action.LoginAction">
這樣當發送請求時,就會自動跳轉到LoginAction中,然後執行裡面的hello()方法
這種方式的作用與第一種設定method屬性的方式,最終實現的效果都是一樣的

第三種:使用萬用字元通過模糊比對的方式調用Action的方法
符號有三種,分別為  *    **    /  
其中 * 代表零個或多個字元,不包括"/"根
而 ** 代表零到多個字元,並且包括根
最後的 / 是轉義符。其中 * 用得最多
在struts.xml中設定為<action name="*User" class="...UserAction" method="{1}">
假設在前台頁面中設定成<s:form action="addUser">
執行時若沒有在struts.xml中找到名為addUser的<action/>的話,則會找到*User
這是一種模糊比對,匹配成功後,流程則進入名為*User的<action/>中,即UserAction
其中method的{1}對應 * 號,即此時將由UserAction中的add()方法執行addUser的請求
若寫成<result>/{1}UserSuc.jsp</result>,那麼執行add()成功後將轉到addUserSuc.jsp
通常專案經理會指定方法命名規則,較常用的兩種方式為addUseruser_add
<action name="*_*" class="...{1}Action" method="{2}"><result>/{1}_{2}Suc.jsp</result></action>
另外可以使用{0}代表完整的*_*,即<result/>中可以用/{0}Suc.jsp代替/{1}_{2}Suc.jsp
這時前台頁面中就需要寫成類似於<a href="User_add.action">添加使用者</a>的樣式
注意User_add.action裡的User首字母必須大寫,因為它將來需要匹配UserAction類
其中{1}代表前面的星號,而{2}代表後面的星號
通常前面的星號代表資料表,後面的星號代表方法,當然具體由公司決定
也就是說,約定好項目中檔案的命名規範後,唯寫一個Action就能匹配N個表的N個方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.