struts的数据封装的实现原理:使用了拦截器.进行数据的封装.
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
这个拦截器的执行流程:
(1)用户访问login.jsp填写表单username和password,提交到user_login指定的UserAction中.
(2)struts创建UserAction对象并把Action放到值栈中的root(list栈)中,UserAction的属性暴露.即这两个属性已经在栈顶
(3)执行ParametersInterceptor这个拦截器.
(4)把username和password封装到一个map集合,值栈中valueStack set(name,value)
(5)然后去栈顶去设置这两个属性的值.此时username和password中已经有了值.
(6)拦截器放行,执行UserAction 中的方法(比如login方法)
login.jsp
UserAction
package cn.itcast.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String username;
private String password;
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;
}
public String login(){
System.out.println("用户名:"+username);
System.out.println("密码"+password);
return "login";
}
}
执行流程图: