- 介绍
- 我们的生活每天都是井井有条的渡过,生活很有规律例如几点睡觉几点起床都已经形成了一个“生物钟”。
- 在工厂里面工人在流水线上辛勤地工作,各个环节构成了整个工作流程,想做好一件事情就要有一个完整的流程,有始有终。
- Struts为我们的项目的Web层设计了一套标准工作流程供我们遵循,即如果你使用Struts框架,就得按照别人的规则来做,下面让我们来分析一下Struts的工作流。
- 流程图
- 首先,来看一张流程图
- 执行步骤如下
- Tomcat启动时,先从web.xml、Struts-config.xml配置文件中信息加载到内存中,Struts-config.xml对应上图文件。
- 登录页面以login.do方式请求服务器,ActionServlet会把这一请求转发到相应Action进行处理。
- ActionServlet是继承了HttpServlet,对HTTPServlet做了实现。
- Action调用Model层,将返回的结果根据<forward />标签配置返回到指定页面。
- 上图中没有画出ActionMapping/FormBean,他们分别是保存配置文件信息和页面数据的对象,也起着相当重要的作用。
-
- 首先,来看一张流程图
- Dispatch和DynaActionForm
- Dispatch
- 通常需要为每一个处理页面写一个Action类进行控制,但如果页面非常多了Action类就会很多,带来很多麻烦。
- Dispatch将每个Action的处理过程移到了每个方法里面,只需要写一个Action就可以完成。
- DynaActionForm
- ActionForm对应于表单上的属性,且每个变量必须与表单上属性名字一样,当表单属性增加或删除时,就需要修改ActionForm的内容,程序还需要从新编译,引入动态ActionForm解决了这个问题,只需要简单的配置即可。
- Dispatch
- Dispatch例子
- 下面是一个物料添加、删除页面实例,调用过程。
- JSP请求页面
-
<body> <form> <a href="item.do?command=add">物料</a> <a href="item.do?command=del">物料</a> </form> </body>
-
- Dispatch Action
package com.bjpowernode.drp.web.actions; import java.io.FileOutputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; import org.apache.struts.upload.FormFile; import com.bjpowernode.drp.BeanFactory; import com.bjpowernode.drp.PageModel; import com.bjpowernode.drp.domain.Item; import com.bjpowernode.drp.domain.ItemCategory; import com.bjpowernode.drp.domain.ItemUnit; import com.bjpowernode.drp.service.DataDictService; import com.bjpowernode.drp.service.ItemService; import com.bjpowernode.drp.web.forms.ItemActionForm; public class ItemAction extends DispatchAction { /** * 添加 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Item item=new Item(); ItemActionForm iaForm=(ItemActionForm)form; BeanUtils.copyProperties(item, iaForm); ItemCategory itemCategory=new ItemCategory(); itemCategory.setId(iaForm.getCategory()); item.setItemCategory(itemCategory); ItemUnit itemUnit=new ItemUnit(); itemUnit.setId(iaForm.getUnit()); item.setItemUnit(itemUnit); ItemService itemService=(ItemService)BeanFactory.getInstance().getBean(ItemService.class); itemService.addItem(item); return mapping.findForward("item_index"); } /** * 删除 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward del(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ItemActionForm itemActionForm=(ItemActionForm)form; ItemService itemService=(ItemService)BeanFactory.getInstance().getBean(ItemService.class); itemService.delItem(itemActionForm.getSelectFlag()); return mapping.findForward("item_index"); } }
- Struts-config.xml配置
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="itemForm" type="com.bjpowernode.drp.web.forms.ItemActionForm"/> </form-beans> <!-- 这里面的parameter参数值必须与请求的command名字一样 --> <action-mappings> <action path="/item" type="com.bjpowernode.drp.web.actions.ItemAction" name="itemForm" scope="request" parameter="command" > <forward name="item_index" path="/item.do" redirect="true"/> </action> </action-mappings> <message-resources parameter="MessageResources" /> </struts-config>
- 注意:1.页面请求的command=add,后面的值需要与Dispatch Action中方法名字相同,这样才能对应到相应的方法上。2.Struts-config.xml中需要配置parameter=command属性。