简单之中也蕴涵着复杂性我们在本系列第一部分和第二部分创建研究一个简单的Struts login应用程序时回避了许多这种复杂性因为那两篇文章是给初学者的Struts入门读物所以我们在应用程序中没有充分运用Struts类库但现在你已经做好准备学习更多的东西了让我们先来看看真正的Struts程序员是如何运用ActionForward类的吧它代表的是控制指令所导向的一个目的资源
从一个servlet内部通过运用javaxservletRequestDispatcher类的forward方法你就可以将控制流程引导到一个目的资源在login应用程序的action类中该代码形式如下
RequestDispatcher rd =
requestgetRequestDispatcher(destination);
rdforward(request response);
其中destination就是到一个目的资源的路径
但是在一个典型的Struts应用程序中你可以用ActionForward类作为替代运用这个类的好处就是你不再需要创建一个RequestDispatcher对象并调用它的forward方法了
你可以将ActionForward类用于一个Action类的execute方法中注意其中一个重载的execute方法有如下的定义它返回一个ActionForward对象
public ActionForward execute( ActionMapping mapping
ActionForm form HttpServletRequest request
HttpServletResponse response)
throws Exception
因为当时我们还没有讲到ActionForward类所以在本系列的第一部分和第二部分中所有Action类的execute方法都只返回了空值现在在一个Action类的execute方法中你就可以用ActionForward类来代替下面这个RequestDispatcher对象实例了
RequestDispatcher rd =
requestgetRequestDispatcher(destination);
rdforward(request response);
新的代码变成return (new ActionForward(destination));
构建ActionForward对象
ActionForward类提供了下面五种构造器
public ActionForward()
public ActionForward(String path)
public ActionForward(String path boolean
redirect)
public ActionForward(String name String path
boolean redirect)
public ActionForward(String name String path
boolean redirect boolean contextRelative)
虽然这些构造器是不需要说明的但我们应该注意下面几点在这些构造器中第二种可能是最常用的后四种构造器中的path参数表示的是到目的资源的路径后三种构造器中的redirect布尔值表示的是是否执行了一个重定向(redirect)(缺省情况下这个值设置为false因为redirect比forward慢)最后第五个构造器中的contextRelative布尔值表示该路径是否应该是contextrelative的而不是modulerelative的
同样一个ActionForward实例也可以有一个逻辑名称你可以用这个名称来查找与一个特殊的ActionMapping对象相关的实例(参见本系列第四部分关于ActionMapping的讲述
[] []