0

每当我输入 URL localhost:8443/context/anyname.anyextension 我得到状态 404(未找到)但是当我尝试类似 localhost:8443/context/anynameWithouthExtensions 时,似乎 Struts 2 试图映射到一个动作,然后我得到错误 500(内部服务器错误)。我不应该总是通过这两种方法获得状态 404 吗?

4

2 回答 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 回答