サーブレットのデバッグ
もちろん、テスト/デバッグサーブレットの開発は常に困難です。 サーブレットは、多くの場合、クライアント/サーバ相互作用の多くを含むが、エラーを再現することは困難です。
ここでは、デバッグを助けることができるいくつかのヒントや提案をしています。
System.out.println()
System.out.println()は、コードの特定の部分を実行するかどうかをテストするために使用されるマーカーとして使用されます。 また、変数の値をプリントアウトすることができます。 加えて:
- システムオブジェクトは、コアJavaオブジェクトの一部であるので、任意の追加のクラスをインストールする必要なしにどこでも使用することができます。 これは、サーブレット、JSP、RMI、EJBの、一般的な豆やクラスだけでなく、スタンドアロンのアプリケーションが含まれています。
- ブレークポイントで異なる停止すると、System.outに書き込み、それは特に価値があるとき、それはタイミングが重要である行うアプリケーションの実行の通常の流れを妨げることはありません。
ここでのSystem.out.println()を使用するための構文は次のとおりです:
System.out.println( "デバッグメッセージ");
上記の文法によって生成されるすべてのメッセージは、Webサーバーのログファイルに記録されます。
メッセージログ
非常に良いアイデアである、すべてのデバッグ、警告およびエラーメッセージを記録するログの適切なメソッドを使用し、Log4Jのレコードをすべてのメッセージを使用することをお勧めします。
次のようにサーブレットAPIはまた、ログ()メソッドを使用して、出力の簡単な方法を提供しています。
//インポートに必要なJavaライブラリのインポートjava.io. *; インポートのjavax.servlet *; 輸入のjavax.servlet.http *; パブリッククラスContextLogはHttpServletを拡張{ ます。public void doGetメソッド(HttpServletRequestのリクエスト、 HttpServletResponseの応答)ServletExceptionががスロー、 java.io.IOExceptionの{ 文字列パー= request.getParameter( "PAR1"); // ServletContext.log 2つのメソッドを呼び出すのServletContextのコンテキスト=のgetServletContext(); 場合(パー== nullの|| par.equals( "")) Throwableのバージョンcontext.logによって//パラメータレコード(「なしメッセージが受信されません: "、 新しいIllegalStateExceptionが(「不足しているパラメータ ")); ほかに context.logは、(「ここで訪問者のメッセージです: "+パー); response.setContentType( "text / htmlの;のcharset = UTF-8"); java.io.PrintWriterアウト= response.getWriter(); 文字列タイトル= "コンテキストログ」。 文字列DOCTYPE = "\ nは<!DOCTYPE htmlの!>"; out.printlnを(DOCTYPE + "<HTML> \ n"は+ "<ヘッド> <タイトル>" +タイトル+ "</タイトル> </ head>の\ n"は+ 「<BODY BGCOLOR = \ "#のf0f0f0 \"> \ n "は+ 「<H1 ALIGN = \ "センター\"> "+タイトル+" </ H1> \ n "は+ 「<H2 ALIGN = \ "センター\"> </ H2> \ nは送信されたメッセージ」+ "</ BODY> </ HTML>"); } //のdoGet }
それは、コンテナのログファイルをサーブレットにテキストメッセージのServletContext。 Tomcatの場合、これらのログは、<Tomcatのインストールディレクトリ> / logsディレクトリで見つけることができます。
これらのログファイルは、実際に周波数誤差を浮上しているかの問題は、命令を与えられています。 このため、我々は通常起こらないログ()関数の例外catch句を使用することをお勧めします。
JDBデバッガを使用します
あなたは、デバッグサーブレットにアプレットやアプリケーションのデバッグJDBコマンドを使用することができます。
サーブレットをデバッグするために、我々はsun.servlet.http.HttpServerをデバッグしてから、HTTPはブラウザ側の要求に応答するHttpServerのサーブレットとしてそれを実行することができます。 このデバッグアプレット小さなプログラムは、非常に類似しています。 およびデバッグアプレットが異なる場合、デバッグ中の実際のプログラムはsun.applet.AppletViewerです。
ほとんどのデバッガは自動的にアプレットをデバッグする方法の詳細を非表示にします。 同様に、サーブレットのために、あなたは、デバッガの助けを借りて、次の操作を行う必要があります。
- それはsun.servlet.http.Http-Serverおよび関連するクラスを見つけることができるように、あなたのデバッガのクラスパスのクラスパスを設定します。
- それは通常ではserver_root /サーブレットとはserver_root /クラスで、サーブレットとサポートクラスを見つけることができるように、あなたのデバッガのクラスパスのクラスパスを設定します。
あなたは、通常、それはサーブレットをリロード無効になるため、あなたのクラスパスに/サーブレットをSERVER_ROOTする必要はありません。 しかし、このルールは、デバッグのために非常に有用であるが含まれています。 これは、サーブレットがサーブレットにブレークポイントを設定する前に、あなたはHttpServerのカスタムサーブレット・ローダーでデバッグすることができます。
正しいクラスパスのクラスパスを設定している場合は、sun.servlet.http.HttpServerのデバッグを開始することができます。 サーブレットは、デバッグしたいコードにブレークポイントを設定し、Webブラウザを使用してサーブレットを与えられたことができます(http:// localhostを:8080 /サーブレット/ ServletToDebug)はHttpServerのに要求を行います。 あなたは、プログラムの実行がブレークポイントで停止表示されます。
コメントを使用
コード内のコメントは、デバッグのためのさまざまな方法でお手伝いします。 ノートは、プロセスをデバッグする他の多くの方法で使用することができます。
Javaサーブレットのコメントと単一行コメント(// ...)、複数行のコメント(/ * ... * /)の使用が一時的にいくつかのJavaコードを除去するために使用することができます。 バグが消えた場合、あなただけのコメントコードを見て、問題を特定します。
クライアントとサーバー側のヘッダー情報
時には、サーブレットが期待されていないようにすると、元のHTTPリクエストを表示し、応答が非常に便利です。 あなたがHTTPの設定に精通している場合は、要求と応答を読んで、どのような情報これらのヘッダを見ることができます。
重要なデバッグ手法
ここではいくつかのヒントサーブレットのデバッグ、次のとおりです。
- SERVER_ROOT /クラスがリロードされ、SERVER_ROOT /サーブレットのかもしれないされませんので、ご注意ください。
- それが表示されるページの元のコンテンツを表示するには、ブラウザを要求します。 これは、問題の形式を識別するのに役立ちます。 これは通常、「表示」メニューのオプションです。
- フルを強制することにより、ブラウザは、出力バッファの前に要求されていないことを確認するために、ページをリロードしてください。 Netscape Navigatorでは、Internet Explorer、Shiftキーを押しながらリフレッシュに、Shiftキーを押しながら再読み込みを使用しています。
- 必ず、サーブレットのinit()メソッドは、パラメータのServletConfigを受け入れ、でsuper.init(設定)を呼び出してください。