目前,我正在从事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
中提及如何添加动作映射?
Struts 操作使用 ActionMapper 进行映射。您可以使用为应用程序配置的不同操作映射器类。默认情况下使用的操作映射器无法像在 Struts 1 中那样将 URL 映射到操作。某些操作映射器可通过插件使用,但无法将参数映射到操作。 仅映射操作名称和命名空间。
在编写自己的动作映射器之前,请务必了解动作映射器在 Struts 2 中的作用及其范围。
DMI 还有一个特殊的参数,它使用方法前缀参数名。如果您找到一种方法来更改参数以使用其值作为名称并添加
method:
前缀。文档说,方法前缀可以以某种方式被覆盖。
使用方法前缀,将调用
操作的baz
,而不是调用execute()
操作的struts.xml
方法(默认情况下,如果它没有在baz
中被重写为其他内容)。anotherMethod()
Struts 2 可以通过提供自定义动作映射器进行扩展。