struts2.x学习笔记(一)

2014-11-24 02:55:18 · 作者: · 浏览: 2

1. struts2核心包

commons-logging-1.0.4.jar struts2框架的日志包

freemarker-2.3.8.jar struts2的UI标签模板

ognl-2.6.11.jar 对象图导航语言包

struts2-core-2.0.11.jar struts框架的核心类库

xwork-2.0.4.jar xwork类库,struts2基于此构建


2.Struts2 Action特征

①struts2 action对象为每一个请求产生一个实例,因此没有线程安全问题;

②struts action不依赖于容器,允许action脱离web容器单独被测试。如果需要,struts2 action仍然可以访问初始的request和response;

③struts2支持通过拦截器堆栈为每一个action创建不同的生命周期。


3.Action的创建方式

①具有public String execute()方法的普通类

public class LoginAction {

	private String username;
	private String password;

	public String execute() {
		User u = new User();
		u.setUsername(this.getUsername());
		u.setPassword(this.getPassword());
		UserDAO dao = new UserDAO();
		if (dao.userLogin(u)) {
			return "login_success";
		} else {
			return "login_failure";
		}
	}

	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;
	}

}
对于这种方法,一个普通类中声明一个execute方法,上面的例子中,username和password需要声明getter和setter方法,当提交表单的时候,框架会实现LoginAction类,然后调用setter方法,给username和password参数赋值。


②实现Action接口

public class LoginAction2 implements Action {

	private String username;
	private String password;

	public String execute() {
		User u = new User();
		u.setUsername(this.getUsername());
		u.setPassword(this.getPassword());
		UserDAO dao = new UserDAO();
		if(dao.userLogin(u)){
			return "login_success";
		}else{
			return "login_failure";
		}
	}

	//username和password的getter和setter方法

}

这种方式与第一种方法类似。


③继承ActionSupport类(推荐)

public class LoginAction3 extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private String username;
	private String password;
	
	public String execute() {
		User u = new User();
		u.setUsername(this.getUsername());
		u.setPassword(this.getPassword());
		UserDAO dao = new UserDAO();
		if(dao.userLogin(u)){
			return "login_success";
		}else{
			return "login_failure";
		}
	}

	//username和password的setter和getter方法

}
这种方法是被推荐使用的,原因是ActionSupport类中实现了很多方法,需要的时候,我们只需要覆盖相应的方法。execute()方法默认返回success。


4.Action接收表单数据
①action类的属性接收用户输入

这种方法使用较多,特别是当form表单中参数较少的情况。上文中的username和password方法即为通过action类的属性接收表单数据。

②利用领域对象接收用户输入(推荐)

public class LoginAction2 implements Action {

	private User user;//不用初始化

	public String execute() {
		UserDAO dao = new UserDAO();
		if(dao.userLogin(user)){
			return "login_success";
		}else{
			return "login_failure";
		}
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
}
这种方法需要创建一个领域对象,上面的例子中是User类,声明时不需要初始化,但是需要提供User的getter和setter方法。

使用这种方法时,在jsp页面form表单中控件的name属性也需要做修改,需要添加域对象名称user:

 用户名:
密码:

在登录成功的jsp页面,如果拿到username和password,也需要添加域对象名称user:

    欢迎用户:
  
密码是:
而其它两种方法,则不需要加域对象名称user,那么写username和password。


③使用ModelDriven模式接收用户输入

public class LoginAction3 extends ActionSupport implements ModelDriven
  
    {

	private static final long serialVersionUID = 1L;
	private User user = new User();//这里一定要初始化;无需写setter/getter方法
	
	public String execute() {
		UserDAO dao = new UserDAO();
		if(dao.userLogin(user)){
			return "login_success";