錯誤頁面 `errorPage.jsp`:
<%@ page isErrorPage="true" contentType="text/html;charset=UTF-8" %>
<html><head><title>系統錯誤</title></head><body>
<h1>發生錯誤!</h1>
<p><strong>訊息:</strong> ${pageContext.exception.message} </p>
<p><strong>堆疊追蹤:</strong></p>
<pre>${pageContext.exception.stackTrace}</pre>
</body></html>
業務頁面 `business.jsp`:
<%@ page errorPage="errorPage.jsp" contentType="text/html;charset=UTF-8" %>
<html><body>
<%
// 模擬異常
String info = getServletInfo();
throw new RuntimeException("業務邏輯異常: " + info);
%>
</body></html>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error/general.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
只有 `isErrorPage="true"` 的頁面才能存取 `exception` 物件 (型別 `java.lang.Throwable`)。
| 物件 | 型別 | 說明 |
|---|---|---|
| exception | Throwable | 拋出的異常實例 |
| pageContext | PageContext | 可取得 request、session、application 等 |
| request | HttpServletRequest | 原始請求 (含屬性 `javax.servlet.error.exception` 等) |
| response | HttpServletResponse | 回應物件,狀態碼已設為 500 |