Struts 2返回404,它不是由tomcat错误页面触发的

时间:2016-02-22 06:45:42

标签: jsp tomcat configuration struts2 http-status-code-404

在Tomcat 7.0.54上考虑struts 2 webapp。

web.xml定义为:

<error-page>
    <location>/WEB-INF/content/global-error-page.jsp</location>
</error-page>

此强制所有 Tomcat错误(包括404)被重定向到global-error-page.jsp;

因此,如果我尝试http://foo.com/bad.jsphttp://foo.com/bad.ext,Tomcat会将我重定向到global-error-page.jsp

但是尝试http://foo.com/bad.action仍然会返回404错误并且tomcat无法处理它,是否可以修复它?!

2 个答案:

答案 0 :(得分:1)

您可以使用 default-action-ref 来捕获所有不匹配的操作as described in the docs

  

通常,如果请求操作,并且框架无法将请求映射到操作名称,则结果将是通常的&#34; 404 - 未找到页面&#34;错误。但是,如果您希望omnibus操作处理任何不匹配的请求,则可以指定默认操作。如果没有其他操作匹配,则使用默认操作。

     

默认操作没有特殊要求。每个包都可以有自己的默认操作,但每个命名空间应该只有一个默认操作。

只需将结果映射到您想要的页面:

<package...>

    <default-action-ref name="index" />

    <action name="index">
        <result>/WEB-INF/content/global-error-page.jsp</result>
    </action>

</package>

答案 1 :(得分:1)

通过实施UnknownHandler来处理不良行为。您可以使用标记在struts.xml中对其进行配置。

<bean type="com.opensymphony.xwork2.UnknownHandler" name="myhandler" class="org.struts.YourUnknownHandler"/>

org.struts.YourUnknownHandler应该实现UknownHandler接口来处理这些情况:

  • 当动作配置未知时
  • 无法找到操作和结果代码的结果
  • 无法找到操作方法时
  

Struts 2也可以配置为处理未知操作或结果,即使没有default-action-ref标记,它也会提供处理此类请求的配置。通常,您可以使用Struts2 xml配置和引用处理程序的unknown-handler-stack标记。您应该检查提供了com.opensymphony.xwork2.UnknownHandler的内容。如果您使用的是常规插件,它默认提供convention未知处理程序,它可能会处理您的操作或结果。

阅读How to implement your unknown handler

方法handleUnknownAction()应返回ActionConfig。您应该自己构建此配置,可以使用ActionConfig.Builder。您也可以单独构建结果,但如果您有全局结果

<global-results>
  <result name="error">/WEB-INF/content/global-error-page.jsp</result>
</global-results>

您可以在运行时配置中找到它并添加到新近烘焙的操作配置。