1. 一个简单的用户管理系统
需求:完成对用户的增删改查
①创建web项目,并引入struts开发包
②画出框架图(使用MyEclipse提供的struts设计界面来画)
login.jsp -> LoginAction(UserForm) -> mainFrame.jsp -> GoManage-> manageuser.jsp
③写好DAO/Service层
2. 分派action(DispatchAction)
为什么需要DispatchAction?
从上面的设计来看,完成功能没有问题,但是如果我们每个请求都对应一个Action,势必造成Action过多,程序显得比较臃肿。为达到减肥的目的,可以把一类请求写到一个Action中处理,所以使用分派action,DispatchAction。好处:1.程序简单 2.利于维护和扩展
快速入门案例:
①创建web工程
②引入struts包
③在struts-config.xml文件中,增加parameter参数,用于将来区分用户的不同请求,它的值由用户指定:
<!-- parameter用于将来区分用户的不同请求,它的值由用户指定 --> <action-mappings > <action attribute="userForm" parameter="flag"或者直接使用图形化界面生成DispatchAction,注意要填写flag:
④使用DispatchAction,往往需要自己从新命名函数,即将Action中的execute方法改名
request.getSession().invalidate();//清除所有session request.getSession().removeAttribute();//只清除某一个session⑤通过flag确定是在DispatchAction中调用哪个函数,往哪里跳转
3. 全局跳转
如果一个forward写在action的标签里面,则说明是局部跳转,也即只有这个action才能使用这个跳转。
全局跳转就是在action标签之外使用<global-forward>
配置完成之后,在Action之中直接加入goerr即可:
return mapping.findForward("goerr");
所谓局部跳转,指的是只有本action才可以跳转到该页面
4. 动态表单dynamic form
当我们jsp的表单内的属性个数和类型不能确定的时候,我们可以使用动态表单来解决问题。
动态表单和普通表单的区别在于:
①普通表单类ActionForm是首先你需要定义这样一个表单类,然后配置到struts-config.xml中
②动态表单完全依赖反射机制创建,因此不需要去定义ActionForm类,直接在struts-config.xml中配置即可
快速入门:
①手动配置struts-config.xml
<form-beans> <form-bean name="userForm" type="org.apache.struts.action.DynaActionForm"> <!-- 该表单的属性是配置出来的 --> <!-- name是jsp页面空间的name,type是将来要保存的数据类型 --> <form-property name="name" type="java.lang.String"></form-property> <form-property name="password" type="java.lang.String"></form-property> <form-property name="email" type="java.lang.String"></form-property> </form-bean> </form-beans>
③从动态表单中取出数据
public ActionForward register(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { DynaActionForm userForm = (DynaActionForm) form;// TODO Auto-generated method stub //从动态表单中取出数据 //这里的名字依照struts-config.xml中配置的name String name = userForm.getString("name"); String password = userForm.getString("password"); String email = userForm.getString("email"); System.out.println(name+","+password+","+email); return mapping.findForward("registerok"); }