我们在com.example.common.action下有一个名为'Index'的Action类,并注释了@ParentPackage('default'),它在struts.xml的package指令中声明,并且其命名空间为“/”扩展“struts-default”。它还声明@Result,以便它响应jsp文件,对应其execute()方法返回的字符串值。
在我们的struts.xml中,配置了以下struts设置以及convention-plugin所需的其他必要配置。
<constant name="struts.action.extension" value=","/>
当访问/ my_context / none_existing_path时,请求显然会命中此Index类,并返回在Index的@Result部分中声明的jsp的内容。 但是,如果我们提供/ my_context /,则会收到以下错误:
HTTP状态404-没有为名称空间[/]和与上下文路径[/ my_context]相关联的动作名称[]映射的动作。
我们想知道访问/ my_context / none_existing_path的原因,其中none_existing_path没有匹配的操作,可以回退到Index类,但是当请求的URL只是/ my_context /时,会返回错误。
目前,我们的约会插件设置声明如下:
<constant name="struts.convention.package.locators.basePackage" value="com.example"/>
<constant name="struts.convention.package.locators" value="action"/>
奇怪的是,如果我们将struts.convention.package.locators.basePackage的值更改为 om.example.common,其中可以通过缩小搜索范围立即找到上述索引文件,请求/ my_context /显示在Index类的@Result部分中声明的jsps的内容。但是,由于我们的操作类分布在整个com.example。[a-z] .action packages中,其中[a-z]表示我们在包结构中拥有的大量目录,因此我们不能将此技巧用作解决方法。我们还尝试将index.jsp放在类路径的顶层,并将index.jsp重定向到/ my_context / index,这有效但不是我们想要的。这可能是个错误吗?
感谢您的回复。 提前谢谢。
答案 0 :(得分:0)
尝试将struts.convention.redirect.to.slash设置为false,看看是否有帮助:
<constant name="struts.convention.redirect.to.slash" value="false" />