Struts2的action采用了低侵入式,不要求實作任何類,也不需要去實作任何接口,Action類完全是一個普通的POJO類,有很好的複用性。
Struts2通常直接使用Action來封裝HTTP請求參數,是以我們需要為Action中的屬性添加setter()和getter()方法。并添加一個execute()方法。
其次,可以實作Action接口以規範Action類開發。
最常用的還是通過繼承ActionSupport類來簡化Action開發。
Struts2的Action類中就可以不使用Servlet的API來實作功能,但在控制層action中想要使用Servlet的API時,第一種方法使用ServletActionContext類即可。這樣的方式也叫緊耦合方式。不推薦使用。
第二種使用方法使用ActionContext類對request、session、application對象進行操作。
Map request = (Map) ActionContext.getContext().get("request");
request.put("list", this.getService().findAll());
- 使用ActionContext類通路Servlet API;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = L;
private String userName;
private String password;
@Override
public String execute() throws Exception {
ActionContext ac = ActionContext.getContext();
if ("zhangsan".equals(userName) && "123456".equals(password)) {
ac.put("success", "登入成功");
return Action.SUCCESS;
} else {
ac.put("error", "使用者名或密碼錯誤");
return Action.ERROR;
}
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2、實作xxxAware接口直接通路Servlet API
為了使struts2能夠直接通路到Servlet API執行個體,struts2還提供了如下接口。
- ServletContextAware 實作該接口的Action,可以直接通路web應用中的ServletContext;
- ServletRequestAware 實作該接口的Action,可以直接通路使用者請求的HttpServletRequest執行個體;
- ServletResponseAware 實作該接口的Action,可以直接通路使用者請求的HttpServletResponse執行個體;
3、借助ServletActionContext類直接通路Servlet API
4、配置action
當我們提供了Action的實作類後,需要在struts2.xml中去配置Action。Struts2是用包來管理action的,是以action的定義是在package元素下定義的。
action充當MVC中的C(controller),當Action處理完有用的請求後,它需要将一個視圖資源傳回給使用者,是以在配置action的時候需要建立邏輯視圖與實體視圖的映射。