5

在 java web 应用程序中有一个选项可以通过在 web.xml 中定义错误页面来处理异常:

<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>

我想知道定义 JSP 错误页面(而不是 HTML 错误页面)是否可能存在问题。因为 JSP 在服务器端运行。会不会出现服务器“半死”,抛出异常,尝试重定向到错误页面,却因为“半死”而无法渲染的场景?

我所说的“半死不活”是指服务器处于某些事情仍然可以工作但其他事情不工作的状态。具体来说,我的意思是任何控制重定向到 web.xml 中定义的错误页面的东西仍然有效,但是 JSP 的实际呈现由于某种原因不起作用(某些东西会引发异常)。

我实际上没有看到这样的问题,但我想知道这是否可能。因为这样可能会出现 HTML 错误页面(因为它没有服务器端逻辑),而 JSP 错误页面将无法工作。

如果是这种情况,那么当 JSP 错误页面失败时,我该如何“回退”到 HTML 错误页面呢?我仍然想使用 JSP 错误页面来显示响应中返回的错误详细信息,但如果不可能,那么我想显示 HTML 页面。

我希望这是有道理的....

4

2 回答 2

1

我找到了一个解决方案:

  1. 定义错误 500 以重定向到 servlet(而不是页面)
  2. 还定义一个 404 错误页面 - 使其成为一个简单的 HTML 页面。
  3. 在 servlet 中,重定向到 JSP 错误 500 页面。
  4. servlet 中的所有逻辑都被一个 try-catch 块包围。catch 块response.sendError(HttpServletResponse.SC_NOT_FOUND);会重定向到 web.xml 中定义的错误 404 页面。
于 2013-02-19T14:47:33.123 回答
0

我当然可以设想一个场景,您error.jsp需要服务器提供一些功能,而服务器无法满足这一点(例如,您失去与数据库的连接,抛出错误,error.jsp触发但由于某种原因需要数据库连接 -也许记录错误或提供联系信息?)。

仅出于这个原因,我会保持error.jsp相对简单和独立。

于 2013-02-19T10:00:08.290 回答