天天看點

Struts2學習筆記(4)——struts2的Action詳解

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());
           
  1. 使用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的時候需要建立邏輯視圖與實體視圖的映射。