Tomcat在URL中添加[/],Struts无法获取正确的动作名称?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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在网址上添加了额外的/
,所以struts认为动作名称是home/
而不是home
。
如果我将动作配置从home
更改为home/
,它可以正常工作。但我不想用额外的/
改变每个动作映射,应该有更好的解决方案,任何人都可以帮助我吗?
这是我的动作配置:
<action name="home" class="com.hp.bpm.portal.action.EmptyAction">
<result name="success" type="tiles">
<param name="location">home.default</param>
<param name="menuItem">home</param>
</result>
</action>
它是在/
包下配置的,当没有任何变化时,我得到了404,如果我在上面更改为:
<action name="home/" class="com.hp.bpm.portal.action.EmptyAction">
<result name="success" type="tiles">
<param name="location">home.default</param>
<param name="menuItem">home</param>
</result>
</action>
然后它工作。
Tomcat正在添加一个尾部斜杠,因为您请求了一个目录。要将目录与具有相同名称的文件区分开来,Tomcat会添加尾部斜杠。包括Jetty在内的其他Web服务器也毫无疑问地遵守了这条规则。否则他们将如何提供目录浏览和欢迎文件列表。另一方面,Struts的Default Action Mapper解析URL以确定它的Action Mapping。 ActionMapper
界面也有不同的实现,可以为您的操作创建映射。默认操作映射器使用最后一个斜杠将命名空间与操作名称分开。还有一些配置,您可以在操作名称中看到斜杠,如果配置设置允许,则在匹配操作名称后确定命名空间。如果将操作重命名为目录名以外的其他名称,则可以轻松解决问题。请注意,convention plugin在处理未知操作时添加了斜杠。
URL末尾的斜杠是一种可以跟随normalize URL的样式。 Struts可以使用尾部斜杠和动作名称""
处理映射。您还可以通过查看Trailing slash in URLs - which style is preferred来决定哪种风格更适合您。
以上是关于Tomcat在URL中添加[/],Struts无法获取正确的动作名称?的主要内容,如果未能解决你的问题,请参考以下文章
myeclipse5.5+tomcat5.5.20+eclipse3.2+struts1+jdk1.5项目无法运行
myeclipse5.5+tomcat5.5.20+eclipse3.2+struts1+jdk1.5项目无法运行