0

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

有什么区别?

在哪些情况下我应该使用这些选项中的每一个?

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

4

2 回答 2

1

第一个是专门针对 500s(内部服务器错误)的容器级错误页面。

第二个是框架级别的错误页面,专门针对Exception异常拦截器的操作调用期间抛出的所有子类。

异常拦截器之前/之后可能存在异常:这意味着您可能应该声明两者,假设它符合您的要求。

我更喜欢在尽可能接近应用程序的地方处理特定于应用程序的异常:这意味着使用 Struts 2 的声明性异常处理机制是我对应用程序本身的任何内容的选择。但是,框架本身甚至容器可能会在框架完成大部分处理之前(或之后)抛出异常。

于 2013-02-19T13:17:08.560 回答
1

让我们以一个示例项目为例,其中简单的 servlets/jsps 直接提供一些简单的内容(静态文件、统计数据等),以及一个更复杂的基于 Struts 的应用程序服务于业务门户。

在简单的 servlets/jsps 中抛出未捕获的异常,异常信息将按照您在web.xml的“error-page”指令中定义的方式显示,而不是 Strut 的。

在基于 Struts 的业务门户中抛出未捕获的异常,异常信息将按照您在struts-config.xml的“global-exceptions”指令中定义的方式显示。

为了更清楚,在极少数情况下,但并非不可能,Struts 框架本身的错误会引发异常,它只能被应用程序服务器/servlet 容器捕获并使用web.xml的“错误页面”指令显示。

于 2013-02-19T07:10:16.073 回答