项目需要导入两个jar包:
struts-1.3.10-all\struts-1.3.10\lib\commons-beanutils-1.8.0.jar
struts-1.3.10-all\struts-1.3.10\lib\commons-logging-1.0.4.jar
/***************************************
@1:先写一个FormUtil类用来填充ActionForm:
***************************************/
package blog.base;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import javax.jms.Session;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class FormUtil {
public static void fillForm(HttpServletRequest request,ActionFormBean actionFormBean){
//1.实例化ActionForm的子类
//2.得到所有的参数名称
//3.将客户端所有的参数名与form bean的每一个属性名进行匹配
//4.如果匹配将从客户端得到的值填充到form bean对应的属性中,然后把form bean保存到session当中
try {
//1.实例化ActionForm的子类
ActionForm actionForm = (ActionForm)Class.forName(actionFormBean.getType()).newInstance();
//2.得到所有的参数名称
java.util.Enumeration parameterEnumeration = request.getParameterNames();
try {
//得到指定类的所有属性
PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(actionForm.getClass()).getPropertyDescriptors();
//3.将客户端所有的参数名与form bean的每一个属性名进行匹配
while (parameterEnumeration.hasMoreElements()) {
String parameter = (String) parameterEnumeration.nextElement();
for(PropertyDescriptor propertyDescriptor:propertyDescriptors){
if(propertyDescriptor.getName().equals(parameter)){
//给属性赋值
//4.如果匹配将从客户端得到的值填充到form bean对应的属性中,然后把form bean保存到session当中
String value = request.getParameter(parameter).toString();
/*propertyDescriptor.setValue(parameter, value);
System.out.println("属性名称:" + parameter + "\t值:" + propertyDescriptor.getValue(parameter));*/
org.apache.commons.beanutils.BeanUtils.setProperty(actionForm,propertyDescriptor.getName() , value);
}
}
}
} catch (IntrospectionException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
HttpSession session = request.getSession();
session.setAttribute(actionFormBean.getName(), actionForm);
System.out.println("in FormUtil ----- actionForm :" + actionForm.toString());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
/***************************************
@2:Action:
***************************************/
package blog.base;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Action {
public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response)
throws Exception {
return null;
}
public ActionForward execute(ActionMapping actionMapping,
ActionFormBean studentForm, HttpServletRequest request,
HttpServletResponse response) {
return null;
}
}
/***************************************
@3:ActionForm:
***************************************/
package blog.base;
import javax.servlet.http.HttpServletRequest;
public class ActionForm {
public void reset(ActionMapping mapping, HttpServletRequest request){}
public String validate(ActionMapping mapping, HttpServletRequest request){return null;}
}
/***************************************
@4:ActionFormBean:
***************************************/
package blog.base;
public class ActionFormBean {
private String name;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public ActionFormBean(){
}
public ActionFormBean(String name,String type){
this.name = name;
this.type = type;
}
@Override
public String toString() {
return "ActionFormBean [name=" + name + ", type=" + type + "]";
}
}
/***************************************
@5:ActionForward:
***************************************/
package blog.base;
public class ActionForward {
private String name;
private String path;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public ActionForward(){
}
public ActionForward(String name,String path) {
this.name = name;
this.path = path;
}
@Override
public String toString() {
return "ActionForward [name=" + name + ", path=" + path + "]";
}
}
/***************************************
@6:ActionMapping:
***************************************/
package blog.base;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class ActionMapping {
private String path;
private String type;
private String name;
private String validate;
private HashMap<String,ActionForward> forwards = new HashMap<String,ActionForward>();;
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValidate() {
return validate;
}
public void setValidate(String validate) {
this.validate = validate;
}
public HashMap<String,ActionForward> getForwards() {
return forwards;
}
public void setForwards(HashMap<String,ActionForward> forwards) {
this.forwards = forwards;
}
public ActionForward findForward(String forwardName){
if (!forwards.isEmpty()&&forwards.containsKey(forwardName)) {
return (ActionForward)forwards.get(forwardName);
}
return null;
}
public String[] findForwards(){
ArrayList<String> forwardNameList = new ArrayList<String>();
Set<String> forwardNames =forwards.keySet();
while (forwardNames.iterator().hasNext()) {
forwardNameList.add(forwardNames.iterator().next());
}
return forwardNameList.toArray(new String[forwardNameList.size()]);
}
}
/***************************************
@7:ActionServlet:
***************************************/
package blog.base;
import java.io.IOException;
import java.util.HashMap;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import blog.AddStudentAction;
public class ActionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ActionFormBean studentFormBean = new ActionFormBean("AddStudentForm", "cn.itcast.test.AddStudentForm");
ActionMapping actionMapping = new ActionMapping();
actionMapping.setName("studentForm");
actionMapping.setPath("/addStudent");
actionMapping.setType("cn.itcast.test.AddStudentAction");
ActionForward actionForward1 = new ActionForward();
actionForward1.setName("AddStudentSuccess");
actionForward1.setPath("/AddStudent.jsp");
ActionForward actionForward2 = new ActionForward("AddStudentFailuer","/AddStudentFailuer.jsp");
HashMap<String, ActionForward> forwards = new HashMap<String, ActionForward>();
forwards.put(actionForward1.getName(), actionForward1);
forwards.put(actionForward2.getName(), actionForward2);
actionMapping.setForwards(forwards);
FormUtil.fillForm(request, studentFormBean);
Action action = new AddStudentAction();
try {
ActionForm actionForm = (ActionForm)request.getSession().getAttribute(studentFormBean.getName());
System.out.println("in ActionServlet ---- actionFrom :" + actionForm.toString());
ActionForward actionForward = action.execute(actionMapping, actionForm, request, response);
System.out.println("in ActionServlet ---- actionForward :" + actionForward.toString());
RequestDispatcher requestDispatcher = request.getRequestDispatcher(actionForward.getPath());
requestDispatcher.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/***************************************
@8:AddStudentForm:
***************************************/
package blog.test;
import javax.servlet.http.HttpServletRequest;
import blog.ActionForm;
import blog.ActionMapping;
public class AddStudentForm extends ActionForm {
private String sName;
private String major;
private int score;
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
System.out.println("in AddStudentForm setsName");
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
System.out.println("in AddStudentForm setMajor");
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
System.out.println("in AddStudentForm setScore");
}
@Override
public String toString() {
return "AddStudentForm [major=" + major + ", sName="
+ sName + ", score=" + score + "]";
}
public AddStudentForm() {
System.out.println("in AddStudentForm constructor");
}
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
System.out.println("in AddStudentForm reset");
}
@Override
public String validate(ActionMapping mapping,
HttpServletRequest request) {
System.out.println("in AddStudentForm validate");
return "";//null 等同于super.validate(mapping, request)
}
}
/***************************************
@9:
AddStudentAction :
***************************************/
package blog.test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import blog.Action;
import blog.ActionForm;
import blog.ActionForward;
import blog.ActionMapping;
public class AddStudentAction extends Action {
public AddStudentAction() {
System.out.println("in AddStudentAction constructor 测试Action的实例个数");
}
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
AddStudentForm studentForm = (AddStudentForm) form;
String returnURLKeyWord = "AddStudentFailuer";
if (studentForm!=null) {
System.out.println(studentForm.getsName());
returnURLKeyWord = "AddStudentSuccess";
}
return mapping.findForward(returnURLKeyWord);
}
}
web.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>cn.itcast.base.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/addStudent</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>AddStudent.jsp</welcome-file>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
另外还有两个jsp页面:AddStudent.jsp,AddStudentFailuer.jsp