public class LoginForm extends ActionForm {
private String username = null;
private String password = null;
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;
}

}import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;public class LoginAction extends Action { @Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginForm loginForm = (LoginForm)form;
// System.out.println("123");
if(loginForm.getUsername().equals("itcast")){
return mapping.findForward("loginSuccess");
}else{
return mapping.findForward("loginFailure");
}在  execute方法的参数中 有一个 form 我想知道  是谁把这个参数传过来的  

解决方案 »

  1.   

    1.首先我们确定struts1的核心就是ActionServlet
    2.ActionSerlvet接收客户Http请求,使用ActionForm Bean自动填充客户送来的表单数据到ActionForm Bean对象中。
    3.然后根据根struts_config.xml将请求分发给相应的Action对象。去调用Action对象的execute()方法。
    4.因为已经过去了actionForm表单信息之,在调用execute的时候,传递给execute方法。
      

  2.   

    答案是ActionServlet。建议你去看一下struts包里的一张流程图。
    struts的处理流程是这样的:
       1,WEB容器将请求派发给中央控制器(ActionServlet)
       2,中央控制器做好初始化工作后,将具体事务交给RequestProcessor去处理(调用他的process()方法)
       3,RequestProcessor通过内部的processMapping方法,通过请求的path,获取对应Action的映射信息(ActionMapping)
       4,ActionMapping的getName()方法可以获取Action配置信息中设置的name属性,如果name属性不为空(即绑定了ActionForm),否则创建name指定的ActionForm,并填充数据。
        5,是否需要校验form数据。
        6,校验通过,创建或使用已存在的Action实例,调用Action的execute方法。
        7,input or forword