gpt4 book ai didi

struts2 - Struts 2 中的下划线和通配符操作映射

转载 作者:行者123 更新时间:2023-12-02 14:11:51 25 4
gpt4 key购买 nike

我正在使用具有以下操作映射的 Struts 2 Web 应用程序:

<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_”,但我的网址中没有下划线。 它应该给我一个错误!不应该吗?

我已经仔细检查过,struts 配置文件中没有“something.action”的另一个映射。我还检查了 web.xml 文件,以防万一...

我能想到的唯一解释是,如果我使用通配符映射,Struts 中下划线将被忽略。但加载 /something_load.action/some_thing_lo_ad.action 就没有什么区别了……事实并非如此。

我知道这一定是一个非常菜鸟的问题,但我一直无法解开这个谜团,既没有查看 Stackoverflow 问题,也没有查看 Struts documentation .

这是主要的 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>

最佳答案

通配符似乎是松散匹配的,以便支持某些旧语法。所以问题不在于下划线,而在于松散的匹配模式。

来自javadocs :

Patterns can optionally be matched "loosely". When the end of the pattern matches \*[^*]\*$ (wildcard, no wildcard, wildcard), if the pattern fails, it is also matched as if the last two characters didn't exist. The goal is to support the legacy "*!*" syntax, where the "!*" is optional.

关于struts2 - Struts 2 中的下划线和通配符操作映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22682398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com