开源MVC框架Struts (二) Struts工作流程分析
2013-08-16 11:46
337 查看
介绍
我们的生活每天都是井井有条的渡过,生活很有规律例如几点睡觉几点起床都已经形成了一个“生物钟”。
在工厂里面工人在流水线上辛勤地工作,各个环节构成了整个工作流程,想做好一件事情就要有一个完整的流程,有始有终。
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例子
下面是一个物料添加、删除页面实例,调用过程。
JSP请求页面
Dispatch Action
Struts-config.xml配置
注意:1.页面请求的command=add,后面的值需要与Dispatch Action中方法名字相同,这样才能对应到相应的方法上。2.Struts-config.xml中需要配置parameter=command属性。
我们的生活每天都是井井有条的渡过,生活很有规律例如几点睡觉几点起床都已经形成了一个“生物钟”。
在工厂里面工人在流水线上辛勤地工作,各个环节构成了整个工作流程,想做好一件事情就要有一个完整的流程,有始有终。
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例子
下面是一个物料添加、删除页面实例,调用过程。
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属性。
相关文章推荐
- 开源MVC框架Struts (二) Struts工作流程分析
- 具体分析Struts工作流程
- 对struts工作流程的分析
- RNA-seq差异表达分析工作流程
- AsyncTask工作流程源码分析
- Android7.0 Vold 进程工作机制分析之整体流程
- Android 开源框架Universal-Image-Loader完全解析(五)- 从代码分析Android-Universal-Image-Loader的图片加载、显示流程
- struts1.3执行流程分析
- Struts工作流程
- JEE5标准与Struts/Spring/Hibernate等诸多开源框架的比较分析
- JEE5标准与Struts/Spring/Hibernate等诸多开源框架的比较分析
- Mustache php 版开源项目 流程 性能分析 以及优化
- Struts的工作流程
- 基于Andoird 4.2.2的Account Manager源代码分析学习:AccountManager的简要工作流程
- NSURLSession使用说明及后台工作流程分析
- Twitter Storm源代码分析之acker工作流程
- DIOCP开源项目 API代码的封装和流程分析
- Struts的工作流程和配置文件的运转
- MVC框架之—Struts原理简介与简单开发流程部署
- 开源社区提交patch的工作流程分析