1. 程式人生 > >struts2分層體系架構

struts2分層體系架構

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。