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