我正在将 Spring MVC 应用程序从 JBoss 7.1.1 迁移到 Wildfly 8.1,这需要(鼓励?)我使用新的“undertow”模块而不是旧的“web”模块。事情正在顺利进行,除了现在对“ /
”的请求,它用于调用带有注释的控制器方法@RequestMapping("/")
,不再到达控制器方法。相反,这些请求似乎被立即重写(而不是重定向)到“ /index.html
”。由于我没有(也从来不需要)这样的文件,所有对“ /
”的请求现在都产生 404 错误。
有趣的是,所有其他 @RequestMapping
带注释的控制器方法都继续正常运行。
这是我standalone.xml
文件中的相关片段。
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" max-post-size="4194304"/>
<host name="default-host" alias="localhost">
</host>
</server>
<servlet-container name="default">
<jsp-config development="true"/>
</servlet-container>
</subsystem>
我怀疑当subsystem
Wildfly 的 undertow 模块的定义没有明确声明 ahandler
时,Wildfly 默认为一个file
处理程序,它可能负责 URL 重写——但我不确定这一点。
Wildfly 的 undertow 模块所基于的 Undertow 项目中有关处理程序的文档表明支持“重定向”处理程序。我曾考虑使用它来解决意外的“/”重写,但我不清楚 Wildfly 的 undertow 模块是否支持这一点,如果支持,如何在standalone.xml
. 然而,即使我能够做到,我认为它会感觉像是一个 hack,我更愿意找到问题的根源(不是双关语)。
有许多 SO 问题描述了令人失望的RequestMapping("/")
行为,许多答案建议使用其他路径(例如""
,"/index"
等),但不要忘记:现有(未更改)代码在 JBoss 7.1.1 中运行良好。(此外,这些问题都没有提到 Wildfly,这可能是这个问题的关键考虑因素。)尽管如此,我尝试了各种建议,但一无所获。看起来 URL 在到达调度程序 servlet 之前就被重写了。
所以,总而言之,我的问题是:
如何
RequestMapping("/")
像在 JBoss 7.1.1 中一样让 Spring MVC 应用程序在 Wildfly 8.1 中运行?