三大框架(ssh)學習——Action介面
Action詳解和配置
Struts1中的action需要實現特定的介面。Struts2中的Action相當的靈活,既可以實現介面、也可以不實現而只是個普通java類。就像我們前面寫的helloworld程式一樣。
不繼承任何類的Action
這種方式的好處是,我們寫的Action類完全不和struts2框架發生耦合,程式碼不依賴struts2的類庫。當然,弊端也比較明顯不能使用struts2中的某些功能。程式碼如下:
package com.bjsxt.struts.test;
public class FirstAction {
private String msg;
public String execute() throws Exception{ System.out.println("FirstAction.test1()"); setMsg("為了讓生活美好!"); return "success"; }
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; } } |
實現Action介面
Struts2的Action介面中只定義了execute方法和幾個預定義的常量。程式碼如下:
package com.opensymphony.xwork2; public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login";
public String execute() throws Exception; } |
開發中,我們儘量使用Action介面中預定義的常量,實現規範程式設計。如下為我們改版的Action類程式碼:
package com.bjsxt.struts.test;
import com.opensymphony.xwork2.Action;
public class FirstAction implements Action {
private String msg;
public String execute() throws Exception{ System.out.println("FirstAction.test1()"); setMsg("為了讓生活美好!"); return SUCCESS; //直接使用介面中的常量 }
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; } } |
繼承ActionSupport類
ActionSupport類實現了Action介面,我們自定義的Action類一般都採用繼承ActionSupport類的方式。使用ActionSupport的好處是我們可以直接使用這個類中已經定義好的方法。
程式碼如下:
package com.bjsxt.struts.test;
import com.opensymphony.xwork2.ActionSupport;
public class FirstAction extends ActionSupport {
private String msg;
public String execute() throws Exception{ System.out.println("FirstAction.test1()"); setMsg("為了讓生活美好!"); return SUCCESS; }
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; } } |
Action中自定義方法和通過URI動態執行(DMI)
Action中可以定義多個任意名稱的方法,不是隻有execute方法。我們為Action增加test2方法:
public String test2() throws Exception { System.out.println("FirstAction.test2()"); setMsg("剛剛呼叫了test2方法!"); return SUCCESS; } |
通過DMI(Dynamic Method Invoke)動態方法呼叫,我們可以通過URL即可呼叫相應的方法,相當方便。格式為:actionname!methodname
位址列輸入:http://localhost/teststruts/first!test2
控制檯輸出:FirstAction.test2()
頁面顯示: