Struts2的模型驅動、屬性驅動的理解
阿新 • • 發佈:2019-02-16
因為在struts1的版本中,屬性的攔截以及控制的處理是被封裝為兩個對立的ActionForm、Action來獲取HttpServerRequest的引數、控制訪問的MAPPING的。而在Struts2中我們可以直接通過Action來獲取請求引數,並把處理的資源對映返回給struts.xml指向對應的檢視資源或者模型或者控制器進行下一步的處理。發現Action在Struts2中負責了struts1的ActionForm以及Action的雙重任務,那麼、我們如果習慣了struts1的開放方式的,在Struts中提供,模型驅動的方式來分解Action的任務,這種模式是通過專門的JavaBean來封裝請求。
我們來比較一下:屬性驅動和模型驅動的區別
屬性驅動的例子:
模型驅動例子:public class InputAction extends ActionSupport { private static final long serialVersionUID = 7513077180980272234L; private String str; private int inte; private double dou; private char c; private boolean flag; private Date date; public String getStr() { return str; } public void setStr(String str) { this.str = str; } public int getInte() { return inte; } public void setInte(int inte) { this.inte = inte; } public double getDou() { return dou; } public void setDou(double dou) { this.dou = dou; } public char getC() { return c; } public void setC(char c) { this.c = c; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public String execute(){ System.out.println(str); System.out.println(inte); System.out.println(dou); System.out.println(c); System.out.println(flag); System.out.println(date); return "succ"; } }
public class ModelDriverAction {
private Account acc;
public Account getAcc() {
return acc;
}
public void setAcc(Account acc) {
this.acc = acc;
}
public String execute(){
System.out.println(acc);
return "succ";
}
}
其實,模型驅動必須實現ModelDriver介面,以及必須實現getMode()方法,該方法把Action和以及對應的Model例項關聯。配置屬性驅動和模型驅動的方式一樣,在struts.xml檔案中配置對應的Action即可,那他怎麼實現的?
那麼,我們要看到Struts2是一個攔截器為核心的框架,在struts_default.xml檔案裡面可以發現對應的攔截器的設定。
而我們在屬性驅動模型下在JSP中訪問屬性時:
<s:property value="str">
而在模型驅動模型下在JSP中訪問屬性時:
<s:property value ="acc.no">
但是,Struts2會自動識別使用何種驅動模式,省略model.系統自動會關聯到model.username的屬性值。