【问题标题】:Struts 2.x migration - How to achieve same URL pattern as Struts 1.xStruts 2.x 迁移 - 如何实现与 Struts 1.x 相同的 URL 模式
【发布时间】:2021-12-03 17:24:43
【问题描述】:

目前我正在从事从 1.x 到 2.x 的 Struts 迁移任务。我面临的主要问题是 URL 模式的变化。

在 Struts 1 中,我们使用如下的 url 模式。

注意:多个方法驻留在每个动作类中

https://<host-name>/xxx.do?method=begin

在struts 2之后,我们遵循下面的url模式

https://<host-name>/xxx_begin.action

struts.xml:(使用通配符映射)

<action name="xxx_*" method ="{1}" class = "foo.Myaction"><result name="success"> myjsp.jsp</result></action>

问题:

有没有办法实现与 Struts 2 中提到的 Struts 1 相同的 url 模式?

由于它的项目非常大,因此更新调用发生的每个地方都非常复杂。 我搜索了很多资源,发现很容易将 .action 扩展配置为 .do 扩展,只需在struts.xml

中添加以下配置

<constant name="struts.action.extension" value="do"/>

但是如何实现和Struts 1一样的方法调用。

如果有解决方案,还请在struts.xml中提及如何添加动作映射?

【问题讨论】:

  • 可能与自定义操作映射器一起使用。
  • Roman C - 有没有我可以参考的资料,以便我更好地理解它?

标签: struts2 migration struts-1


【解决方案1】:

使用ActionMapper 映射Struts 动作。您可以使用为应用程序配置的不同动作映射器类。默认使用的动作映射器不能像在 Struts 1 中那样将 URL 映射到动作。一些动作映射器可以通过插件使用,但不能将参数映射到动作。 只有动作名称和命名空间被映射。

在编写自己的动作映射器之前,了解What is the role of the action mapper in Struts 2 及其scope 非常重要。

DMI 还使用了一个特殊的参数,它使用方法前缀参数名称。如果您找到了如何更改参数以将其值用作名称并添加method: 前缀的方法。文档说 method prefix 可以以某种方式被覆盖。

使用方法前缀,而不是调用 baz 操作的 execute() 方法(默认情况下,如果它没有在 struts.xml 中被覆盖为其他东西),baz 操作的 anotherMethod() 将被调用。

可以通过提供 custom action mapper 来扩展 Struts 2。

【讨论】:

    猜你喜欢
    • 2014-11-09
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多