Struts 2.3 – redirectvs redirectAction

Struts2.3上下文中redirectredirectAction的主要区别是什么?

我在下面看到了redirect和redirectAction的 URL。

我清楚下面几点:

  • redirect就像sendRedirect()方法。 新的请求被创build,清除之前的值栈和动作(动作实例,动作错误,字段错误等)不再可用。
  • redirectAction ,控制跳转到不同的动作(在相同或其他包中)
  • 推荐使用redirectAction而不是redirect。

但是当我实现上面提到的两个例子,我只需要改变我的struts.xml

  • 在两者中,行动不再可用,
  • 新的请求被创build,
  • 生成的url是相同的。

首先,我对在redirectAction Apache文档中写的陈述感到困惑

这比ServletRedirectResult要好,因为它不要求将ActionMapper处理的URL模式编码到struts.xmlconfiguration文件中。 这意味着您可以随时更改您的url格式,并且您的应用程序仍然可以正常工作。 强烈build议,如果您redirect到另一个操作,则使用此结果而不是标准redirect结果。

其次,我对这两者的区别还不是很清楚。

区别很明显: redirectAction只是另一个结果类型,它扩展了redirect结果类型,提供了属性actionNamenamespacemethod 。 这些属性用于构建用于替代redirect结果类型的location属性的URI。

声明是可以的,更好的从ActionMapping构建URL,这是由redirectAction结果类型实现的,而不是手动编码。 即使手动使用UrlHelper而不是硬编码。 在JSP中总是使用s:url标记。

一个重定向到动作,一个重定向到任意的资源。

actionRedirect对于大多数Struts 2应用程序来说更好,因为大多数重定向将发生在应用程序内部的位置,并且您需要提供的只是其映射中的操作名称。

你可以用一个简单的redirect来做同样的事情,但是你需要提供动作扩展(如果有的话),所以它有点丑陋和脆弱(例如,如果动作扩展改变,尽管很少发生)。