2012-11-20 84 views
0

每当我输入URL localhost:8443/context/anyname.anyextension时,我得到Status 404(Not found)但是当我尝试像localhost:8443/context/anynameWithouthExtensions之类的东西时,似乎Struts 2尝试映射到一个操作,然后我得到错误500(内部服务器错误)。我不应该总是通过两种方法获得404状态吗?在Struts 2中处理错误页面

回答

0

你可能已经使用了<default-action-ref,将被用于所有的命名空间联合国匹配的请求默认操作的参考。 对于该名称空间,您有一些规则指定仅处理没有扩展名 的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 

,因为默认的动作裁判大概只能绑定到根。

AND默认动作发生错误,当然...

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码,但会属于另一个问题。

感谢, 安迪