<エラー情報の取得>

エラーページ内からは、ServletRequst#getAttribute("エラー情報を表す属性名")で,エラー情報が取得できます。

エラー情報(HttpServletRequest)...エラーページから参照する
getAttribute("javax.servlet.error.status_code") エラーステータス・コード
getAttribute("javax.servlet.error.exception_type") Exceptionクラス名
getAttribute("javax.servlet.error.message") エラーメッセージ
getAttribute("javax.servlet.error.exception") exceptionメッセージ
getAttribute("javax.servlet.error.request_uri") 呼び出し元のリクエストURI
getAttribute("javax.servlet.error.servlet_name") サーブレット名

呼び出し元サーブレット ・ ・ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ ・ ・ try { //例外が起こる処理 new FileInputStream("nofile.txt"); } catch (IOException ex) { throw new ServletException(ex); } ・ ・ エラーページ public class ErrorPage extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ response.setContentType("text/html; charset=Windows-31J"); PrintWriter out = response.getWriter(); out.println(request.getAttribute("javax.servlet.error.status_code")); out.println(request.getAttribute("javax.servlet.error.message")); ・ ・ out.close(); } } web.xml <error-page> <exception-type>java.lang.exception</exception-type> <location>/servlet/Errorpage</location> </error-page>

<ログに記録>

ServletContextクラスのlog()を使用すると、Throwableオブジェクト(ExceptionやError)のスタックトレースをログに記録することができます。

こちらを参照

<エラーをJSPで表示>

JSPまたはサーブレット実行時にException、Errorが発生した場合、指定のエラーページを出力することができます。
エラーページの指定は、pageディレクティブのerrorPage属性にURIをセットし、エラーページ側ではisErrorPage属性をtrueにします。

(エラーを呼ぶJSP) <%@ page contentType="text/html;charset=Windows-31J" pageEncoding="Windows-31J" errorPage="Error.jsp" %> (Error.jsp) <%@ page contentType="text/html;charset=Windows-31J" pageEncoding="Windows-31J isErrorPage="true" import="java.io.*" %> ・ ・ <pre> <% Throwable th = (Throwable) request.getAttribute("javax.servlet.jsp.jspException"); //JspWriterをPrintWriterオブジェクトにラッピング th.printStackTrace(new PrintWriter(out)); %> </pre> ・バッファのフラッシュ
 pageディレクティブの属性autoFlashがtrueの場合、エラーページに転送される前にバッファがフラッシュされ、エラーページ転送が失敗する可能性があります。
・StackTraceの出力
 JspWriterクラスはPrintWriterクラスのサブクラスではないので、ExceptionやErrorのスタックトレースをJSPから出力する場合は、JspWriterをPrintWriterオブジェクトにラッピングする必要があります。

エラーメッセージを自分でセットすることもできます。 (エラーを呼ぶJSP) <%@ page contentType="text/html;charset=Windows-31J" pageEncoding="Windows-31J" errorPage="Error.jsp" %> ・ ・ <% throw new Exception("マイナスの数値が入力されました。"); %> ・ ・ (Error.jsp) <%@ page contentType="text/html;charset=Windows-31J" pageEncoding="Windows-31J isErrorPage="true" import="java.io.*" %> ・ ・ <% out.println("エラーです。 : " + exception.getMessage()); %>