为了处理我的java Web应用程序中的错误,我可以使用:
在web.xml文件中定义<error-page>
,如下所示:
<error-page>
<error-code>500</error-code>
<location>/file_not_found.html</location>
</error-page>
或者在struts-config.xml中定义<global-exceptions>
,如此:
<global-exceptions>
<exception
key="error.global.mesage"
type="java.lang.Exception"
path="/pages/error.jsp" />
</global-exceptions>
有什么区别?
我应该在哪些情况下使用这些选项?
如果两者都在同一个应用程序中定义会发生什么? (定义两者都有意义吗?)
答案 0 :(得分:1)
让我们看一个示例项目,简单的servlets / jsps直接提供一些简单的内容(静态文件,统计信息等),以及一个更复杂的基于Struts的应用程序,为商业门户提供服务。
在简单的servlets / jsps中抛出未捕获的异常,异常信息将按照您在 web.xml 的“错误页面”指令中的定义显示,而不是Strut的。
基于Struts的业务门户中出现未捕获的异常,异常信息将按照您在 struts-config.xml 的“global-exceptions”指令中的定义显示。
为了更多的清除,在极少数情况下,但并非不可能,Struts框架本身的错误会引发异常,它只能被应用程序服务器/ servlet容器捕获并使用 web.xml '显示s“错误页面”指令。
答案 1 :(得分:1)
第一个是专门针对500s的容器级错误页面(内部服务器错误)。
第二个是框架级错误页面,专门用于在异常拦截器的动作调用期间抛出的所有Exception
子类。
异常拦截器之前/之后可能存在异常:这意味着您可能应声明两者,假设它符合您的要求。
我更喜欢尽可能靠近应用程序处理特定于应用程序的异常:这意味着使用Struts 2的声明性异常处理机制是我对应用程序内部任何内容的选择。然而,框架本身,甚至容器,可能会在框架完成大部分处理之前(或之后)抛出异常。