English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Servletが例外を投げたとき、Webコンテナはexceptionを使用して-type要素の web.xml 中で、投げられた例外のタイプに一致する設定を検索します。
web.xml内で使用する必要があります。 error-page 要素を使用して特定の例外 またはHTTP ステータスコード 対応するServlet呼び出しを行います。
仮に、以下の ErrorHandler のServletは、定義された例外やエラーが発生したときに呼び出されます。以下はweb.xmlで作成される項目です。
<!-- servlet定義 --> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>ErrorHandler</servlet-class> </servlet> <!-- servletマッピング --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/ErrorHandler</url-pattern> </servlet-mapping> <!-- error-codeに関連するエラーページ --> <error-page> <error-code>404</error-code> <location>/ErrorHandler</location> </error-page> <error-page> <error-code>403</error-code> <location>/ErrorHandler</location> </error-page> <!-- exception-typeに関連するエラーページ --> <error-page> <exception-type> javax.servlet.ServletException </exception-type > <location>/ErrorHandler</location> </error-page> <error-page> <exception-type>java.io.IOException</exception-type > <location>/ErrorHandler</location> </error-page>
すべての例外に対する一般的なエラーハンドリングプログラムを定義したい場合は、以下の error を定義する必要があります。-page を指定するのではなく、各例外ごとに error を定義する必要があります。-page エレメント:
<error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page>
以下は、上記の web.xml エラーハンドリングに注意すべきポイントです:
Servlet ErrorHandler は他の Servlet と同様に定義され、web.xml で設定されます。
エラーステータスコードが発生した場合、どちらであれ 404(Not Found 未找到)または 403(Forbidden 禁止)の場合、ErrorHandler の Servlet が呼び出されます。
Web アプリケーションが以下をスローした場合 ServletException または IOExceptionそれでは、Web コンテナは ErrorHandler の Servlet を呼び出します。
異なるタイプのエラーまたは例外を処理するために、異なるエラーハンドリングプログラムを定義することができます。上の例は非常に一般的であり、例を通じて基本的な概念を理解していただければ幸いです。
以下は、エラーハンドリングの Servlet がアクセスできるリクエスト属性のリストで、エラーを分析するために使用されます。/例外の性質。
順序番号 | 属性 & 説明 |
---|---|
1 | javax.servlet.error.status_code この属性は、ステータスコードを提供し、ステータスコードは保存され、java.lang.Integer データ型として保存された後、分析することができます。 |
2 | javax.servlet.error.exception_type この属性は、例外の種類に関する情報を提供し、例外の種類は保存され、java.lang.Class データ型として保存された後、分析することができます。 |
3 | javax.servlet.error.message この属性は、具体的なエラーメッセージに関する情報を提供し、情報は保存され、java.lang.String データ型として保存された後、分析することができます。 |
4 | javax.servlet.error.request_uri この属性は、URL が Servlet を呼び出すに関する情報を提供し、情報は保存され、java.lang.String データ型として保存された後、分析することができます。 |
5 | javax.servlet.error.exception この属性は、例外が発生した情報を提供し、情報は保存され、java.lang.Throwable データ型として保存された後、分析することができます。 |
6 | javax.servlet.error.servlet_name この属性は、Servletの名前を示し、名前は保存され、java.lang.Stringデータ型として保存され、解析されます。 |
以下は、定義したエラーまたは例外が発生した場合のエラーハンドリングプログラムを提供するServletの例です。
このサンプルでは、Servlet内の例外処理について基本的な理解を得ることができます。同じ概念を使って、より複雑な例外処理アプリケーションを書くことができます:
//必要な java ライブラリをインポート import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; //HttpServlet クラスを拡張 public class ErrorHandler extends HttpServlet { // GET メソッドリクエストを処理するメソッド public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception"); Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name"); if (servletName == null){ servletName = "Unknown"; } String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri"); if (requestUri == null){ requestUri = "Unknown"; } // 設定応答内容タイプ response.setContentType("text"/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "基本チュートリアルウェブ Error/Exception 情報"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n"); out.println("<h1>基本チュートリアルウェブ例外情報の例デモ</h1>"); if (throwable == null && statusCode == null){ out.println("<h2>エラーメッセージが失われた</h2>"); out.println("戻るには<a href=\"" + response.encodeURL("http://localhost:8080/)") + "\">ホームページ</a>。"); }else if (statusCode != null) { out.println("エラーコード: " + statusCode); }else{ out.println("<h2>エラーメッセージ</h2>"); out.println("Servlet Name : " + servletName + "</br></br>"); out.println("例外の種類: " + throwable.getClass( ).getName( ) + "</br></br>"); out.println("リクエスト URI: " + requestUri + "<br><br>"); out.println("例外情報: " + throwable.getMessage( )); } out.println("</body>"); out.println("</html>"); } // POSTメソッドリクエストを処理するメソッド public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
通常の方法でコンパイル ErrorHandler.java、あなたのクラスファイルを<Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。
让我们在 web.xml ファイルに以下の設定を追加して例外を処理します:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>com.w3codebox.test.ErrorHandler</servlet-class> </servlet> <!-- servlet mappings --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/TomcatTest/ErrorHandler</url-pattern> </servlet-mapping> <error-page> <error-code>404</error-code> <location>/TomcatTest/ErrorHandler</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page> </web-app>
現在、例外を発生させる Servletを使用するか、誤った URLを入力して、Web コンテナが呼び出されることを試みます。 ErrorHandler の Servlet、適切なメッセージを表示します。例えば、誤った URL(例:http:)を入力した場合、//localhost:8080/TomcatTest/UnKonwPage)のとき、以下の結果が表示されます:
エラーコード:404