DispatchAction类-根据请求参数实现业务分派 .

 

DispatchAction是Struts包含的另一个能大量节省开发时间的Action类。

与其它Action类仅提供单个execute()方法实现单个业务不同,DispatchAction允许你在单个Action类中编写多个与业务相关的方法。

 

这样可以减少Action类的数量,并且把相关的业务方法集合在一起使得维护起来更容易。

要使用DispatchAction的功能,需要自己创建一个类,通过继承抽象的DispatchAction得到。

对每个要提供的业务方法必须有特定的方法标识即识别标志。

 

本文将着重来理解下org.apache.struts.actions.DispatchAction类。

在有些时候一个Action可能有多种操作,比如查询,增加,删除等,都集中在了一个Action中,每个操作都会被封装在一个独立的方法中,此时需要使用某个变量来区分Action接收到的请求需要执行哪个操作,根据操作类型再去调用相应的方法。

DispatchAction类

DispatchAction类为我们实现了这个根据请求动态的分发业务给不同的方法。

比如某个Action地址为”hello.do”,当访问”hello.do?method=add”时,将调用Action类中的add方法;访问”hello.do?method=show”时,将调用Action类中show方法。

这里的请求路径参数”?method=add”,

前者参数名”method”需要在struts-config.xml配置文件中的action元素中使用parameter属性定义,

后者参数值对应着Action类中的同名方法。

我们需要将自己的Action继承DispatchAction类,DispacthAction类又是继承Action类的。然后需要声明自己的业务处理方法,

public class HelloAction extends DispatchAction
{
    public ActionForward add (ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response)
    {
        System.out.println("HelloAction.add()");
        return null;
    }
    public ActionForward show (ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response)
    {
        System.out.println("HelloAction.show()");
        return null;
    }
}

这里需要注意的是,自定义的业务处理方法的格式为:

public ActionForward methodName (ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response)

{

}

方法的返回类型与方法参数都是固定的,方法名可以自定义。

对应的struts-config.xml文件中action元素:

<action
          attribute="helloForm"
          input="/index.jsp"
          name="helloForm"
          path="/hello"
          scope="request"
          type="com.yourcompany.struts.action.HelloAction"
          cancellable="yes"
          parameter="method"
  />

最后一个parameter属性是关键。

当访问 “/hello.do?method=add”时,将调用add方法,输出”HelloAction.add()”

当访问”/hello.do?method=show”时,将调用show方法,输出”HelloAction.show()”

你可能感兴趣的:(Dispatch)