zoukankan      html  css  js  c++  java
  • 开源MVC框架Struts (二) Struts工作流程分析

    1. 介绍
      1. 我们的生活每天都是井井有条的渡过,生活很有规律例如几点睡觉几点起床都已经形成了一个“生物钟”。
      1. 在工厂里面工人在流水线上辛勤地工作,各个环节构成了整个工作流程,想做好一件事情就要有一个完整的流程,有始有终。
      2. Struts为我们的项目的Web层设计了一套标准工作流程供我们遵循,即如果你使用Struts框架,就得按照别人的规则来做,下面让我们来分析一下Struts的工作流。
    1. 流程图
      1. 首先,来看一张流程图

        1. 执行步骤如下
          1. Tomcat启动时,先从web.xmlStruts-config.xml配置文件中信息加载到内存中,Struts-config.xml对应上图文件。
          1. 登录页面以login.do方式请求服务器,ActionServlet会把这一请求转发到相应Action进行处理。
            1. ActionServlet是继承了HttpServlet,对HTTPServlet做了实现。
          1. Action调用Model层,将返回的结果根据<forward />标签配置返回到指定页面。
          2. 上图中没有画出ActionMapping/FormBean,他们分别是保存配置文件信息和页面数据的对象,也起着相当重要的作用。
    1. DispatchDynaActionForm
      1. Dispatch
        1. 通常需要为每一个处理页面写一个Action类进行控制,但如果页面非常多了Action类就会很多,带来很多麻烦。
        2. Dispatch将每个Action的处理过程移到了每个方法里面,只需要写一个Action就可以完成。
      1. DynaActionForm
        1. ActionForm对应于表单上的属性,且每个变量必须与表单上属性名字一样,当表单属性增加或删除时,就需要修改ActionForm的内容,程序还需要从新编译,引入动态ActionForm解决了这个问题,只需要简单的配置即可。
    1. Dispatch例子
      1. 下面是一个物料添加、删除页面实例,调用过程。
      2. JSP请求页面
        1. <body>
          	<form>
          		<a href="item.do?command=add">物料</a>  
          		<a href="item.do?command=del">物料</a>  
          	</form> 
          </body>


      1. Dispatch Action
        1. 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");
          	}
          	
          }
          


      1. Struts-config.xml配置
        1. <?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. 注意:1.页面请求的command=add,后面的值需要与Dispatch Action中方法名字相同,这样才能对应到相应的方法上。2.Struts-config.xml中需要配置parameter=command属性。
  • 相关阅读:
    头指针与头结点的异同
    C:Users用户名AppData里面的文件可以删除吗
    mac os x在PC上安装
    迷宫问题
    对称自反传递
    判断
    离散实验模板
    离散实验二
    tp.5.0.21抛出错误
    php复制整个文件夹,此方法可过滤掉.svn文件夹
  • 原文地址:https://www.cnblogs.com/lilongsheng1125/p/4978572.html
Copyright © 2011-2022 走看看