struts2分層體系架構
阿新 • • 發佈:2019-01-06
service包:
package service;
public interface LoginService {
//使用者登陸
public boolean isLogin (String username,String password);
}
service.impl包:
package service.impl; import service.LoginService; public class LoginServiceImpl implements LoginService{ //模擬下,沒有呼叫dao層 public boolean isLogin(String username, String password) { if ("hello".equals(username) && "world".equals(password)) { return true; } return false; } }
action包:
package action; import service.LoginService; import service.impl.LoginServiceImpl; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private String username; private String password; private LoginService loginService = new LoginServiceImpl(); public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String execute() throws Exception { boolean result = loginService.isLogin(username, password); if (result) { return SUCCESS; } return INPUT; } //為什麼不在validate驗證登陸。 //一般在validate值是進行一些沒有業務邏輯的驗證,比如:驗證使用者的名字長度時候合法, //日期時候合法。而登陸是有義務邏輯,不要放在validate中。 public void validate () { } }
struts.xml配置檔案:
<action name = "login" class="action.LoginAction">
<result name = "success">/index.jsp</result>
<result name = "input">/login.jsp</result>
</action>
struts2的模型驅動(Model Driven),之前的所講的是屬性驅動(property Driven)ps:在action中使用物件還是物件中的屬性。
package action;
import service.LoginService;
import service.impl.LoginServiceImpl;
import sun.java2d.pipe.ValidatePipe;
import bean.Person;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven<Person> {
/**
*
*/
private static final long serialVersionUID = 1L;
private Person person = new Person ();
private LoginService loginService = new LoginServiceImpl();
@Override
public String execute() throws Exception {
return "success";
}
//為什麼不在validate驗證登陸。
//一般在validate值是進行一些沒有業務邏輯的驗證,比如:驗證使用者的名字長度時候合法,
//日期時候合法。而登陸是有義務邏輯,不要放在validate中。
public void validate() {
System.out.println("validate execute!");
}
public Person getModel() {
System.out.println("getModel execute!");
return person;
}
}
比較:
1:屬性驅動靈活,準確;模型驅動不靈活,因為很多的時候頁面提交過來的引數並不屬於模型中的屬性,
也就是說頁面說提交過來的引數與模型中的屬性並不一致,這個是很常見的情況。
2:模型驅動更加符合面向物件程式設計風格,使得我們獲得的物件而不是一個一個離散的值。
小結:推薦使用屬性驅動編寫Action。