JSPのデバッグ


JSP またはサーブレット プログラムのテスト/デバッグは常に非常に困難です。 JSP およびサーブレット プログラムはクライアント/サーバーの対話を多く含む傾向があるため、エラーが発生する可能性が非常に高く、エラー環境を再現するのは困難です。

以下では、プログラムのデバッグに役立つヒントと提案をいくつか示します。


System.out.println()

System.out.println() を使用すると、コードの一部が実行されたかどうかを簡単にマークできます。もちろん、さまざまな値を出力することもできます。こちらも:

  • System オブジェクトはコア Java オブジェクトになったため、追加のクラスを導入することなくどこでも使用できます。使用範囲には、サーブレット、JSP、RMI、EJB、Bean、クラス、スタンドアロン アプリケーションが含まれます。

  • ブレークポイントで実行を停止する場合と比較して、System.out を使用して出力することは、アプリケーションの実行プロセスに大きな影響を与えません。この機能は、タイミング メカニズムが非常に重要なアプリケーションで非常に役立ちます。

System.out.println() を使用するための構文は次のとおりです:

System.out.println("Debugging message");

これは System.out.print() を使用する簡単な例です:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>System.out.println</title></head>
<body>
<c:forEach var="counter" begin="1" end="10" step="1" >
   <c:out value="${counter-5}"/></br>
   <% System.out.println( "counter= " + 
                     pageContext.findAttribute("counter") ); %>
</c:forEach>
</body>
</html>

さて、上記の例を実行すると、次の結果が生成されます:

-4
-3
-2
-1
0
1
2
3
4
5

Tomcat サーバーを使用している場合は、ログ ディレクトリの stdout.log ファイルで次の追加コンテンツを見つけることができます:

counter=1
counter=2
counter=3
counter=4
counter=5
counter=6
counter=7
counter=8
counter=9
counter=10

このメソッドを使用すると、変数と変数を組み合わせることができます。その他 問題の根本的な原因を分析して調査するために、情報がシステムログに出力されます。


JDB ロガーの使用

J2SE ロギング フレームワークは、JVM で実行されているあらゆるクラスにロギング サービスを提供できます。したがって、このフレームワークを使用してあらゆる情報を記録できます。

JDK でロガー API を使用するように上記のコードを書き直してみましょう:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page import="java.util.logging.Logger" %>

<html>
<head><title>Logger.info</title></head>
<body>
<% Logger logger=Logger.getLogger(this.getClass().getName());%>

<c:forEach var="counter" begin="1" end="10" step="1" >
   <c:set var="myCount" value="${counter-5}" />
   <c:out value="${myCount}"/></br>
   <% String message = "counter="
                  + pageContext.findAttribute("counter")
                  + " myCount="
                  + pageContext.findAttribute("myCount");
                  logger.info( message );
   %>
</c:forEach>
</body>
</html>

その実行結果は前の結果と似ていますが、stdout.log ファイルに出力される追加情報を取得できます。ここでは、ロガーの info メソッドを使用します。以下に、stdout.log ファイルのスナップショットを示します。

24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=1 myCount=-4
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=2 myCount=-3
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=3 myCount=-2
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=4 myCount=-1
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=5 myCount=0
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=6 myCount=1
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=7 myCount=2
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=8 myCount=3
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=9 myCount=4
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=10 myCount=5

メッセージは、sever()、warning()、info()、config()、fine()、finer()、finest を使用することで、さまざまな優先順位で送信できます。 () 方法。 finest() メソッドは最良の情報を記録するために使用され、sever() メソッドは最も重要な情報を記録するために使用されます。

Log4J フレームワークを使用して、重大度と重要性に基づいて分類されたメッセージをさまざまなファイルに記録します。


デバッグ ツール

NetBeans はツリー構造であり、独立した Java アプリケーションとネットワーク アプリケーションの開発をサポートし、JSP デバッグもサポートするオープン ソースの Java 総合開発環境です。

NetBeans は、次の基本的なデバッグ機能をサポートしています:

  • ブレークポイント

  • シングルステップ追跡

  • 観測ポイント

詳細については、NetBeans マニュアルを参照してください。


JDB デバッガー

を使用すると、通常のアプリケーションをデバッグするのと同じように、JSP やサーブレットで jdb コマンドを使用してデバッグできます。

通常、sun.servlet.http.HttpServer オブジェクトを直接デバッグして、HTTP リクエストに応答して HttpServer がどのように JSP/サーブレットを実行するかを確認します。これはアプレットのデバッグに非常に似ています。違いは、アプレット プログラムが実際にデバッグするのは sun.applet.AppletViewer であることです。

ほとんどのデバッガは、アプレットのデバッグ方法を知っているため、アプレットをデバッグするときに一部の詳細を自動的に無視できます。デバッグ オブジェクトを JSP に転送したい場合は、次の 2 つのことを行う必要があります:

  • デバッガのクラスパスを設定して、sun.servlet.http.Http-Server および関連クラスを見つけられるようにします。

  • デバッガーのクラスパスを設定して、JSP ファイルと関連クラスを見つけられるようにします。

クラスパスを設定したら、sun.servlet.http.Http-Serverのデバッグを開始します。 JSP ファイル内の任意の場所にブレークポイントを設定し、ブラウザを使用してサーバーにリクエストを送信すると、プログラムがブレークポイントで停止することがわかります。


コメントの使用

プログラム内のコメントは、プログラムのデバッグにさまざまな方法で役立ちます。コメントはプログラムのデバッグのさまざまな側面で使用できます。

JSP は Java アノテーションを使用します。バグが消えた場合は、コメントしたばかりのコードを詳しく調べてください。通常、その理由がわかります。


クライアントおよびサーバーのヘッダー モジュール

JSP が意図したとおりに動作していないときに、生の HTTP リクエストとレスポンスを表示すると便利な場合もあります。 HTTP の構造に精通している場合は、リクエストとレスポンスを直接観察して、これらのヘッダー モジュールで何が起こっているかを確認できます。


重要なデバッグ スキル

ここでは、JSP をデバッグするためのさらに 2 つのヒントを明らかにします:

  • ブラウザを使用して元のページのコンテンツを表示し、形式に問題があるかどうかを判断します。このオプションは通常、[表示] メニューの下にあります。

  • ページを強制的にリロードするときに、ブラウザが以前のリクエスト出力をキャプチャしないようにしてください。 Netscape Navigator ブラウザを使用している場合は、Shift-Reload を使用し、IE ブラウザを使用している場合は、Shift-Refresh を使用します。