在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.jsp
或http://foo.com/bad.ext
,Tomcat会将我重定向到global-error-page.jsp
但是尝试http://foo.com/bad.action
仍然会返回404错误并且tomcat无法处理它,是否可以修复它?!
答案 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>
您可以在运行时配置中找到它并添加到新近烘焙的操作配置。