web.xml错误500和struts全局异常有什么区别?
问题描述:
对于我的Java Web应用程序处理错误,我可以使用:web.xml错误500和struts全局异常有什么区别?
-
在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>
什么是迪fference?
在哪些情况下应该使用这些选项的?如果两者都在同一个应用程序中定义
会发生什么? (定义两者都有意义吗?)
答
让我们来看一个简单的servlet/jsps直接提供一些简单内容(静态文件,统计信息等)的示例项目,以及一个更复杂的基于Struts的应用程序,它为业务门户。
简单的servlet/JSP中抛出未捕获的异常,如你在web.xml中的‘错误页的’指令定义将显示异常信息,而不是支柱的。
在基于Struts的业务门户中引发的未捕获异常,异常信息将按照您在“全局异常”指令中定义的那样显示。
更多的间隙,在极少数情况下,但不是不可能的,在Struts框架中的错误本身抛出一个异常,它只能通过应用服务器/ servlet容器抓住并利用的web.xml的“无差错显示的页面“指令。
答
首先是一个容器级别的错误页专门为500秒(内部服务器错误)。
第二个是一个框架级错误页面专为例外拦截的行动调用期间抛出的所有Exception
子类。
在异常拦截器之前/之后可能会出现异常:这意味着您可能应声明,假设它符合您的要求。
我更喜欢处理尽可能靠近应用尽可能应用程序特定的例外:这意味着使用Struts 2的声明异常处理机制,是我的应用程序自身内部的任何选择。但是,可能发生的情况是,框架本身甚至容器都可能在框架完成大部分处理之前(或之后)抛出异常。