我已经将我的Web应用程序配置为根据异常类型显示一些错误页面,但问题是如果我为java.lang.Exception配置一般错误页面,则每个异常都会重定向到此通用错误页面。 / p>
我的web.xml文件:
<!-- error pages -->
<error-page>
<exception-type>org.apache.shiro.authz.UnauthorizedException</exception-type>
<location>/acesso-nao-autorizado</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/login/</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/erro</location>
</error-page>
如您所见,我有两个特定的异常类型,而不是java.lang.Exception作为最后一个资源。如果我删除最后一个条目,则每个异常都会将用户重定向到正确的视图。但是对于最后一个条目,引发异常的类型无关紧要,用户将始终被重定向到/ error。
有什么想法吗?
答案 0 :(得分:0)
根据Servlet Spec 3.0(第10.9.2节):
“Web应用程序可能使用
exception-type
元素声明了错误页面。在这种情况下,容器通过将抛出的异常与使用{error-page
的{{1}}定义列表进行比较来匹配异常类型1}} element。匹配导致容器返回exception-type
条目中指示的资源。类层次结构中最接近的匹配获胜。“
所以你正在做的事情应该工作......你的location
元素的顺序无关紧要。 (JBoss 6.0.0及更高版本支持Servlet Spec 3.0 ...)
我的建议:
检查异常确实是您期望的那个。
检查是否由于其他原因导致重定向错误页面;例如特定错误页面自己抛出异常。
检查JBoss问题跟踪器是否存在相关错误。