每当我输入 URL localhost:8443/context/anyname.anyextension 我得到状态 404(未找到)但是当我尝试类似 localhost:8443/context/anynameWithouthExtensions 时,似乎 Struts 2 试图映射到一个动作,然后我得到错误 500(内部服务器错误)。我不应该总是通过这两种方法获得状态 404 吗?
问问题
512 次
2 回答
0
您可能使用了 <default-action-ref
,它是对用于该名称空间的所有 UN 匹配请求的默认操作的引用。对于该命名空间,您有一些规则指定只处理没有扩展名的 URL。
看看这个:
文档:http ://struts.apache.org/2.1.6/docs/action-configuration.html
<package name="Hello" extends="action-default">
<default-action-ref name="UnderConstruction">
<action name="UnderConstruction">
<result>/UnderConstruction.jsp</result>
</action>
并最终发布您的配置。
如果是这种情况,我希望你得到 404 即使有
localhost:8443/context/SOME_INVENTED_PATH/anynameWithouthExtensions
因为默认操作 ref 可能仅绑定到根。
并且默认操作会出错,当然......
于 2012-11-20T17:38:12.913 回答
0
我相信这是 Struts 2 如何尝试将 URL 映射到操作的结果。当您提供“.anyextension”时,in 知道它不是有效的 Struts 2 操作,除非您要附加“.action”作为扩展名(这是 Struts 2 使用的默认扩展名)。任何其他的,它都知道这不是 Struts 2 调用。同样,我认为缺少扩展是 Struts 2 的默认设置,它会尝试查找操作,但由于没有有效操作而失败。
您可以通过将其添加到您的 struts.xml 来添加自定义扩展:
<constant name="struts.action.extension" value=",action,do" />
此外,您可以向 Struts 添加一些错误处理程序,以在有效操作的情况下返回 404 代码,但这将属于不同的问题。
谢谢,安迪
于 2012-11-20T16:15:54.973 回答