Struts 2.x 迁移 - 如何实现与 Struts 1.x 相同的 URL 模式

问题描述 投票:0回答:1

目前,我正在从事Struts从1.x到2.x的迁移任务。我面临的主要问题是 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 模式?

由于项目非常大,更新每个调用发生的地方非常复杂。

我搜索了许多来源并发现,只需在 struts.xml 中添加以下配置即可轻松将 .action

 扩展配置为 
.do

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

但是,如何实现像Struts 1一样的方法调用呢?

如果有解决方案,也请在

struts.xml
中提及如何添加动作映射?

url struts2 migration struts-1 action-mapping
1个回答
0
投票

Struts 操作使用 ActionMapper 进行映射。您可以使用为应用程序配置的不同操作映射器类。默认情况下使用的操作映射器无法像在 Struts 1 中那样将 URL 映射到操作。某些操作映射器可通过插件使用,但无法将参数映射到操作。 仅映射操作名称和命名空间。

在编写自己的动作映射器之前,请务必了解动作映射器在 Struts 2 中的作用及其范围

DMI 还有一个特殊的参数,它使用方法前缀参数名。如果您找到一种方法来更改参数以使用其值作为名称并添加

method:
前缀。文档说,方法前缀可以以某种方式被覆盖。

使用方法前缀,将调用

baz
操作的
execute()
,而不是调用
struts.xml
操作的
baz
方法(默认情况下,如果它没有在
anotherMethod()
中被重写为其他内容)。

Struts 2 可以通过提供自定义动作映射器进行扩展。

© www.soinside.com 2019 - 2024. All rights reserved.