Tomcat在URL中添加,Struts无法获取正确的动作名称?

我有这个项目在Jetty工作正常,最近根据要求,我在Tomcat上测试它,但我发现了一个问题。

我们正在使用Struts2,并且动作映射定义为没有扩展名,例如http://www.somehost.com/projectname/home

当我将所有内容部署到Tomcat并访问上面的url时,我收到此错误:

 "There is no Action mapped for namespace [/] and action name [home/]" 

很明显Tomcat在url上添加了一个额外的/ ,所以struts认为动作名称是home/而不是home

如果我将动作配置从home更改为home/ ,它可以正常工作。 但是我不想用额外的/更改每个动作映射,应该有更好的解决方案,任何人都可以帮助我吗?

这是我的动作配置:

   home.default home   

它是在/ package下配置的,当没有任何变化时,我得到了404,如果我在上面更改为:

   home.default home   

然后它工作。

Tomcat正在添加一个尾部斜杠,因为您请求了一个目录。 要将目录与具有相同名称的文件区分开来,Tomcat会添加尾部斜杠。 包括Jetty在内的其他Web服务器也毫无疑问地符合此规则。 否则他们将如何提供目录浏览和欢迎文件列表。 另一方面,Struts的Default Action Mapper解析URL以确定它的Action Mapping。 ActionMapper接口也有不同的实现,可以为您的操作创建映射。 默认操作映射器使用最后一个斜杠将命名空间与操作名称分开。 还有一些配置可以在操作名称中看到斜杠,如果配置设置允许,则在匹配操作名称后确定命名空间。 如果将操作重命名为目录名以外的其他内容,则可以轻松解决问题。 请注意, 约定插件在处理未知操作时添加了一个尾部斜杠。

URL末尾的斜杠是您可以遵循以标准化URL的样式。 Struts可以处理带有斜杠和动作名称""映射。 您还可以通过查看URL中的尾随斜杠来决定哪种样式更适合您- 哪种样式更受欢迎 。