在Struts2中,Action是最重要的,因為struts2是由多個Action組成的;比如要對業務進行分發都需要使用Action;
而定義Action通常需要遵循幾個規范:
1.盡量繼承ActionSupport,因為他為你實現了很多規范;
2.重寫public String execute()throws Exception 方法,此方法是訪問Action默認調用的方法(當然可以自己設定調用任意方法,此配置需要在struts.xml進行);
3.Action類中的屬性是用於封裝HTTP請求、頁面結果數據的;在訪問Action時,如果帶有請求參數,則會自動調用setter方法對屬性進行賦值;
了解Action接口和ActionSupport類:ActionSupport可以說是在Struts開發中最常用的類;
我們在struts.xml中配置Action;
模板:
[html]
配置Action規范:<action>元素必須在<package>中;
下面開始介紹struts.xml常用的元素;
package能夠用幾個屬性:
(1)name:表示包名稱,通過隨意指定即可;
(2)extends:繼承哪個父包,如果繼承了某個父包,則會繼承父包的action;通常我們需要繼承 struts-default ;
(3)namespace:定義命名空間,如果不指定,則為默認的命名空間;如果為"/",則表示根命名空間;
(4)abstract:不常用,如果為true,則不能定義action;
舉例:
[html]
默認命名空間是一個很特殊的命名空間,如果要訪問一個action,最後都會在默認命名空間中尋找;
比如/aaa/bbb.action,首先先去命名空間為"/aaa"中去找,如果找不到,則去默認命名空間中尋找bbb.action;
而根命名空間只是一個普通的命名空間;
<action>的屬性有:
(1)name:指定了Action的名字,也是對外的URL;
(2)class:訪問此Action的處理類,默認為ActionSupport,ActionSupport的返回值為SUCCESS,注意:必須要寫出類的全名;
(3)method:如果不指定,則默認調用execute方法,如果指定,則調用此方法;
定義了Action的返回結果所對應的JSP(當然可以是任意的視圖頁面);
<result>的常用屬性為
(1)name:Action方法返回的字符串,默認為success;
(2)type:結果類型,默認為dispatcher,此問題在下面會詳細講解;
代碼示例:
[html]
邏輯Action和物理Action的區別:
邏輯Action是在struts.xml中配置的action元素,物理Action是實際的Action類;
如果某個Action類存在fun1() 和fun2()方法,則可以定義兩個邏輯Action,雖然處理類都是一樣的;