此图为Struts运行流程图
例如现在用一个登录页面做例子来解释:
1.用户请求登录。
2.调用ActionForm 填充FormBean,其实就是调用ActionBean的set()方法。
控制器代码:
<form-bean name="formBean1" type="com.yourcompany.struts.form.UserForm"></form-bean>
3.分发请求,控制器分发Http请求。
控制器代码:
<action path="/login" type = "com.yourcompany.struts.action.LoginAction"
name = "formBean1"
scope = "request"
input = "/login.jsp"/>
<action path="/regist" forward="/regist.jsp"/>
4.调用FormBean,其实就是ActionBean获取用户输入的信息,其实是调用ActionForm的get()方法,
然后对输入的信息进行验证。
5.调用javaBean Action对象调用execute()方法处理请求。
6.回送ActionForword对象,进过处理之后把对象ActionForword封装好回送。
7.转发HTTP请求 身份验证通过则由ActionServlet将源客户端HTTP请求再次转发至错误页面,或者转发至正确页面 控制器代码为:
<global-forwards>
<forward name="failed" path="/error.jsp"></forward>
<forward name="successed" path="/right.jsp"></forward>
</global-forwards>
8.调用javaBean 还要调用javaBean的对象mapping的findForward()的方法
9.最后调用javaBean的对象后才响应HTTP。
我理解的Struts的运行流程就是这样的。这是本人的愚见,有误之处还望大家指出。
源代码如下:
LoginAction .java
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;
import com.yourcompany.struts.business.UserLoginLog;
import com.yourcompany.struts.form.UserForm;
public class LoginAction extends Action ... {
/** *//**验证用户输入的信息
* @return the mapping.finfWard()
* @return {@link ActionMapping}
*/
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
...{
UserForm userForm = (UserForm)form;
String username = userForm.getUsername();
String password = userForm.getPassword();
System.out.println(username + password);
if("123".equals(username) && "123".equals(password))
...{
UserLoginLog ul = new UserLoginLog();
ul.save(username, password);
return mapping.findForward("successed");
}
else
...{
return mapping.findForward("failed");
}
}
}
UserForm .java
import org.apache.struts.action.ActionForm;
/** */ /**
* @author yellow
*
*/
public class UserForm extends ActionForm ... {
private static final long serialVersionUID = 1L;
private String username;
private String password;
/** *//**
* 构造器
*
*/
public UserForm() ...{
}
/** *//**
*
* @return the password
* @return String
*/
public String getPassword() ...{
return password;
}
/** *//**
*
* @param password
*/
public void setPassword(String password) ...{
this.password = password;
}
/** *//**
*
* @return the username
* @return String
*/
public String getUsername() ...{
return username;
}
/** *//**
*
* @param username
*/
public void setUsername(String username) ...{
this.username = username;
}
}
UserLoginLog.java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Calendar;
public class UserLoginLog ... {
/** *//**把信息保存到服务器
*
* @param username
* @param password
*/
public void save(String username,String password)
...{
Calendar today = Calendar.getInstance();
String fileName = "../logs/user_login_log.txt";
try ...{
FileWriter fw = new FileWriter(fileName,true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(today.getTime().toString() + ":user" + username + ":password" +
password + "log in. ");
bw.close();
} catch (Exception e) ...{
System.out.println("文件操作出错");
}
}
}
struts-config.xml
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd" >
< struts-config >
< data-sources />
< form-beans >
< form-bean name ="formBean1"
type ="com.yourcompany.struts.form.UserForm" >
</ form-bean >
</ form-beans >
< global-exceptions />
< global-forwards >
< forward name ="failed" path ="/error.jsp" ></ forward >
< forward name ="successed" path ="/right.jsp" ></ forward >
</ global-forwards >
< action-mappings >
< action path ="/login"
type ="com.yourcompany.struts.action.LoginAction" name ="formBean1"
scope ="request" input ="/login.jsp" />
< action path ="/regist" forward ="/regist.jsp" />
</ action-mappings >
< message-resources
parameter ="com.yourcompany.struts.ApplicationResources" />
</ struts-config >
web.xml
< web-app xmlns ="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" version ="2.4"
xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< servlet >
< servlet-name > actionServlet </ servlet-name >
< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
</ servlet >
< servlet-mapping >
< servlet-name > actionServlet </ servlet-name >
< url-pattern > *.do </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > login.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
有误之处还望大家指出,注意登录功能还没有做好。
运行环境 Myeclipse + JDK1.5