开源MVC框架Struts (二) Struts工作流程分析
来源:互联网 发布:python读取命令行参数 编辑:程序博客网 时间:2024/05/16 13:51
- 介绍
- 我们的生活每天都是井井有条的渡过,生活很有规律例如几点睡觉几点起床都已经形成了一个“生物钟”。
- 在工厂里面工人在流水线上辛勤地工作,各个环节构成了整个工作流程,想做好一件事情就要有一个完整的流程,有始有终。
- 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属性。
- 开源MVC框架Struts (二) Struts工作流程分析
- Struts框架工作流程
- Struts框架核心工作流程与原理
- Struts框架核心工作流程与原理
- 学习Struts框架系列(一):模拟Struts工作流程
- Struts(二)——STRUTS基本工作流程 .
- 对struts工作流程的分析
- Struts工作流程
- Struts开发工作流程
- Struts工作流程
- struts的工作流程
- Struts的工作流程
- Struts的工作流程
- Struts工作流程
- STRUTS工作流程
- Struts 的工作流程
- Struts的工作流程
- Struts的工作流程
- Android - Binder机制 - ProcessState和IPCThreadState
- uniGUI中使用Grid++Report设计报表
- 黑马程序员_使用管道流进行两线程间数据交换
- (android地图开发) 高德地图添加抽屉栏效果
- 字符串strip()方法注意事项
- 开源MVC框架Struts (二) Struts工作流程分析
- uva 10010
- fcntl使用
- 更改cocos2d-x android 项目的cocos2d-x的版本
- 服务(Service)全解析(五)--前台Service
- Mybatis 批量插入的方法
- 快速排序--qsotr()函数
- SCANF函数应用技巧(尤其%[]的用法)
- uva 10361