Strut2的属性驱动,模型驱动的理解
??? 因為在struts1的版本中,屬性的攔截以及控制的處理是被封裝為兩個對立的ActionForm、Action來獲取HttpServerRequest的參數、控制訪問MAPPING的。而在Struts2中我們可以直接通過Action來獲取請求參數,并把處理的 資源映射返回給struts.xml指向對應的視圖資源或者模型或者控制器進行下一步的處理。發現Struts2中的Action負責了struts1的ActionForm以及Action的雙重任務。如果我們習慣了struts1的開發方式,在Struts中提供模型驅動的方式來分解Action的任務,這種模式是通過專門的JavaBean來封裝請求。
??? 下面我們來比較一下:屬性驅動和模型驅動的區別
?? ?一、屬性驅動的例子:
?
public class Login implements Action { // 繼承Action接口private String username;private String password;// 在屬性驅動里面是依靠getter/setter方法獲存取請求參數public void setUsername(String username) {this.username = username;}public String getUsername(){return this.username;}public void setPassword(String password){this.password = password;}public String getPassword(){return this.password;}// 默認的方法public String execute() throws Exception{return SUCCESS;} }?
二、? 模型驅動例子?
?
//模型使用JavaBean的設計方式 //和Struts1的ActionForm是一樣 public class UserBean { private String username; private String password; public void setUsername(String username){ this .username = username; } public String getUsername(){ return this .username; } public void setPassword(String password){ this .password = password; } public String getPassword(){ return this .password; } } //實現Action public class Login implements Action,ModelDriver<UserBean> { //必須繼承ModelDriver 且指明具體的UserBean類型 private UserBean model = new UserBean(); public String execute() throws Exception{ if (getMode().getUsername().equals( "scott" ) && getMode().getPassword().equeals("tiger" ) ){ return SUCCESS; }else{ return ERROR; } } public UserBean getModel(){ return model; } }?
其實,模型驅動必須實現ModelDriver接口,以及必須實現getMode()方法,該方法把Action和以及對應的Model實例關聯。
配置屬性驅動和模型驅動的方式一樣,在struts.xml文件中配置對應的Action即可,那他怎么實現的? 那么,我們要看到Struts2是一個攔截器為核心的框架,在struts_default.xml文件里面可以發現對應的攔截器的設置。
三、在JSP頁面訪問的區別:
而我們在屬性驅動模型下在JSP中訪問屬性時:
?? <s:property value="username">
? 而在模型驅動模型下在JSP中訪問屬性時:
? <s:property value ="model.usename">
??? 但是,Struts2會自動識別使用何種驅動模式,省略model.系統仍能自動會關聯到model.username的屬性值。 ?? 四、選擇屬性驅動和模型驅動的問題: 當JSP表單的屬性和數據持久層對象的數據成員一致的話就用strut2的模型驅動,代碼統一。 當表單的屬性和數據持久層對象的數據成員不一致的話就用屬性驅動,因為如果用模型驅動要兩個bean,一個與數據持久層對象,一個與提交的表單對應
?
?
?
?
轉載于:https://www.cnblogs.com/zhangdp/archive/2012/12/14/2817860.html
總結
以上是生活随笔為你收集整理的Strut2的属性驱动,模型驱动的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 叨叨小算盘 3.0
- 下一篇: 对象的赋值和复制(转)