我正在使用具有以下操作映射的 Struts 2 webapp:
<action name="something_*" class="foo.whatever.MyAction" method="{1}">
<result>blah/myJsp.jsp</result>
...
</action>
因此,如果我加载 URL /something_load.action
,它会调用MyAction.load()
,依此类推。小菜一碟。令我困惑的是加载/something.action
也确实有效(我猜它正在调用该execute()
方法)。这怎么可能?我的动作映射应该与“something_”匹配,但我的 URL 中没有下划线。它应该给我一个错误!不应该吗?
我已经仔细检查了 struts 配置文件中没有“something.action”的另一个映射。我还检查了 web.xml 文件,以防万一……
我能想象的唯一解释是,如果我使用通配符映射,Struts 中会忽略下划线。但是,加载/something_load.action
, /some_thing_lo_ad.action
... 并没有什么不同,这不是真的。
我知道这一定是一个非常愚蠢的问题,但是我无法解决这个谜团,既没有查看 Stackoverflow 问题,也没有查看Struts 文档。
这是主要的 struts.xml 文件:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.freemarker.templatesCache" value="true" />
<package name="default" extends="struts-default">
<!-- interceptors ... -->
<!-- global results for error pages -->
</package>
<!-- lots of includes -->
</struts>