1. 程式人生 > >三大框架(ssh)學習——Action介面

三大框架(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()

頁面顯示: