zoukankan      html  css  js  c++  java
  • Action的详解

    Action是struts中的一个抽象类,它其实是Struts的心脏部分,前面提到的ActionServlet和ActionForm进过处理获取的请求和数据,都会到达Action中得到分发。

    一:Action有那些作用

    1. 可以进行一些表单数据的检查,这里面的检查一般和页面的检查是不一样的,页面的检查都是客户端的一些数据格式规范的检查,这里的检查而与业务相关的检查一般放到这里面检查,比如与JavaBean相关的一些操作。也可以说它是一个业务逻辑的管理分发的地方。
    2. 执行必要的业务逻辑,不如存取数据库,调用实体bean等。它会直接调用业务逻辑层的javabean去处理数据库的操作,比如增删改查等。
    1. 根据处理的结果决定程序的去向,并以ActionForward对象的形式传递给ActionServlet,这样ActionServlet通过配置文件,决定返回的数据到达那个页面。
    1. Action是一个抽象类,必须实现以后才能执行,执行的方法是execute方法。

     

    二 :一个完整的Action示例和执行流程。

     

    [html] view plaincopy
    1. <actionpathactionpath="/aFullAction"  
    2. type="somePackage.someActionClass">  
    3. name="someForm"  
    4. input="someJSP.jsp"  
    5. <forwardnameforwardname="successful" path="someJSP.jsp"/>  
    6. <forwardnameforwardname="failed" path="someOtherJSP.jsp"/>  
    7. </action>  

    Action执行流程

    首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.xml的配置定位到相应的mapping(映射);接下来如果form的范围是request或者在定义的范围中找不到这个form,创建一个新的form实例;取得form实例以后,调用其 reset()方法,然后将表单中的参数放入form,如果validate属性不为false,调用validate()方法;如果validate()返回非空的ActionErrors,将会被转到input属性指定的URI,如果返回空的ActionErrors,那么执行Action的 execute()方法,根据返回的ActionForward确定目标URI。

    这样做的效果是:execute()仅当validate()成功以后才执行;input属性指定的是一个URI。

     

    三.一个特殊的Action:DispatchAction

    由于当业务太多的时候,每个业务都要创造一个Action,这样会大大增加Action的数量,而且也会造成浪费。

    它的主要好处就是把所有的Action放到一个类里面,通过传过来的参数决定调用那个Action操作。

    DispatchAction类是一个抽象类,它实现了父类(Action)的execute()方法,所以它的子类就不用来实现这个方法了,只需要专注与实际操作的方法。

     

    下面看一个dispatchAction应用实例。

     1.首先要一个DispatchAction的子类,它含有一些方法,login,logout,method1,

    [java] view plaincopy
    1. public class AccountAction extends DispatchAction {  
    2.     public ActionForward login(ActionMapping mapping,  
    3.                               ActionForm form,  
    4.                               HttpServletRequest request,  
    5.                               HttpServletResponse response)  
    6.     throws Exception {  
    7.         // 進行一些Login的逻辑  
    8.               return mapping.findForward("success");    
    9.    
    10.     }  
    11.                                                                                  
    12.     public ActionForward logout(ActionMapping mapping,  
    13.                                 ActionForm form,  
    14.                                 HttpServletRequest request,  
    15.                                 HttpServletResponse response)  
    16.     throws Exception {  
    17.         // 進行一些Logout的逻辑  
    18.               return mapping.findForward("success1");    
    19.    
    20.     }  
    21.     public ActionForward method1(ActionMapping mapping,  
    22.                                 ActionForm form,  
    23.                                 HttpServletRequest request,  
    24.                                 HttpServletResponse response)  
    25.     throws Exception {  
    26.         // 進行一些method1的逻辑  
    27.               return mapping.findForward("success");    
    28.     }  
    29. }  


      一定要注意在DispatchAction中你想执行的操作,都必须要有统一的参数(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response),是一个规定.

    2.接下来是配置struts-config.xml

     

    [html] view plaincopy
    1. <action path="/login"  type="examples.AccountAction"   
    2.             name="logonForm"  
    3.             scope="request"  
    4.             parameter="action"  
    5.             input="/pages/dispatch1.jsp">  
    6.       <forward name="success" path="/pages/success.jsp" />  
    7.    </action>  
    8.   
    9.    <action path="/logout"  type="examples.AccountAction"   
    10.             name="logonForm"  
    11.             scope="request"  
    12.             parameter="action"  
    13.             input="/pages/dispatch1.jsp">  
    14.       <forward name="success1" path="/pages/success1.jsp" />  
    15.    </action>  

     这里需要注意的就是parameter属性的值,因为这个值要和页面传来的参数对应.

     

    3.再来看看JSP页 pages/dispatch1.jsp

    [html] view plaincopy
    1.    
    2. <%@ taglib uri="/tags/struts-html" prefix="html" %>  
    3. <html:link href="/DispathActionTest/login.do?action=login">login</html:link><br>  
    4. <html:link href="/DispathActionTest/logout.do?action=logout">logout</html:link>  

     这里要注意几点,首先 ?后面的KEY要和struts-config.xml中的parameter相同,还有它的VALUE要是你在action的一个方法名字,这里方法名为login, 那么在程序运行时就是调用login的操作,如果是logout,那程序就调用logout的操作.

  • 相关阅读:
    树链剖分(转载)
    随机数生成器
    错排公式的理解与推导(转载)
    容斥原理(转载)
    Luogu 3758 [TJOI2017]可乐(有向图邻接矩阵幂的意义 矩阵快速幂)
    vue input复选框checkbox默认样式纯css修改
    vue 页面切换的时候vuex记录之前的滚动条位置
    vue从入门到进阶
    es6 学习笔记
    vue 项目笔记
  • 原文地址:https://www.cnblogs.com/shipeng22022/p/4614161.html
Copyright © 2011-2022 走看看