每当我输入URL localhost:8443 / context / anyname.anyextension时我得到状态404(未找到)但是当我尝试类似localhost:8443 / context / anynameWithouthExtensions之类的东西时,Struts 2似乎试图映射到一个动作然后我收到错误500(内部服务器错误)。我不应该总是通过两种方法获得404的状态吗?
答案 0 :(得分:0)
我认为这是Struts 2尝试将URL映射到操作的结果。当你提供“.anyextension”时,知道它不是一个有效的Struts 2动作,除非你附加“.action”作为扩展名(这是Struts 2使用的默认扩展名)。任何其他,它知道它不是一个Struts 2调用。同样,我认为缺少扩展是Struts 2的默认设置,它会尝试查找操作,但由于没有有效的操作,它会失败。
您可以通过将自定义扩展添加到struts.xml来添加自定义扩展:
<constant name="struts.action.extension" value=",action,do" />
此外,您可以向Struts添加一些错误处理程序,以便在有效操作的情况下返回404代码,但这将属于另一个问题。
谢谢, 安迪
答案 1 :(得分: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>
并最终发布您的配置。
如果是这种情况,我预计即使有
也有404localhost:8443/context/SOME_INVENTED_PATH/anynameWithouthExtensions
因为默认操作ref可能只绑定到root。
并且默认操作会出错,当然......