Action類似於servlet,在用戶對瀏覽器輸入url訪問的時候充當控制器的角色。它在訪問時產生,執行execute()之后就銷毀了。
寫Action是代理事務,它實現的三種方式是: (1)POJO類
(2)繼承ActionSupport類
(3)實現Action接口
POJO類
public class ActionPrint { public String execute(){ System.out.println("ActionPrint execute!"); return "success"; } }
繼承ActionSupport類
import com.opensymphony.xwork2.ActionSupport; public class ActionInputCheck extends ActionSupport{ private int a; private double b; private char c; private String d; public int getA() { return a; } public void setA(int a) { this.a = a; } public double getB() { return b; } public void setB(double b) { this.b = b; } public char getC() { return c; } public void setC(char c) { this.c = c; } public String getD() { return d; } public void setD(String d) { this.d = d; } public String execute(){ return SUCCESS; } public void validate(){ if(a<0) this.addActionError("d不能小於0"); } }
實現Action接口
import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ModelDriven; import Beans.User; public class MDriven implements Action,ModelDriven<User>{ private User user=new User(); public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public User getModel() { // TODO Auto-generated method stub return user; } @Override public String execute() throws Exception { ActionContext context=ActionContext.getContext(); context.getSession().put("username", user.getUsername()); return SUCCESS; } }
ModelDriven接口是讓javabean的實現和Action分離,Action只用扮演好控制器的角色就好,javabean是在Model層的東東,這樣比較符合MVC的設計模式。
寫了Action之后相應加上struts.xml的配置
</action> <action name="InputCheck" class="StrutsFund.ActionInputCheck"> <result name="success">/output.jsp</result> </action> <action name="MDriven" class="StrutsFund.MDriven"> <result name="success">/login_success.jsp</result> </action> <action name="print" class="StrutsFund.ActionPrint"> <result name="success">/index.jsp</result> </action>
訪問的時候就在網址欄中輸入:http://localhost:8080/項目名/ActionName
struts.properties配置文件
該文件定義了struts2框架的大量屬性。只要將該文件放在web應用的classes下,struts2框架就會自動加載。