web.xml错误500和struts全局异常有什么区别?

时间:2013-02-19 06:56:22

标签: java exception-handling struts web.xml

为了处理我的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>
    

有什么区别?

我应该在哪些情况下使用这些选项?

如果两者都在同一个应用程序中定义会发生什么? (定义两者都有意义吗?)

2 个答案:

答案 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的声明性异常处理机制是我对应用程序内部任何内容的选择。然而,框架本身,甚至容器,可能会在框架完成大部分处理之前(或之后)抛出异常。