Jsp-debugging

提供:Dev Guides
移動先:案内検索

JSP-デバッグ

この章では、JSPのデバッグについて説明します。 JSPとサーブレットのテスト/デバッグは常に困難です。 JSPおよびサーブレットは、大量のクライアント/サーバー相互作用を伴う傾向があり、エラーを発生させる可能性がありますが、再現は困難です。

以下は、デバッグに役立ついくつかのヒントと提案です。

System.out.println()を使用する

  • System.out.println()*は、特定のコードが実行されているかどうかをテストするためのマーカーとして簡単に使用できます。 変数値も出力できます。 次の追加ポイントを考慮してください-
  • SystemオブジェクトはコアJavaオブジェクトの一部であるため、追加のクラスをインストールすることなくどこでも使用できます。 これには、サーブレット、JSP、RMI、EJB、通常のBean *および*クラス、および*スタンドアロンアプリケーション*が含まれます。
  • ブレークポイントで停止するのに比べて、 System.out への書き込みは、アプリケーションの通常の実行フローにあまり干渉しません。これは、Imingが重要な場合に非常に有益です。

以下は* 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>

上記のJSPにアクセスすると、ブラウザには次の結果が表示されます-

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

Tomcatを使用している場合、これらの行はlogsディレクトリの stdout.log の最後に追加されます。

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

これにより、変数やその他の情報をシステムログに取り込むことができます。システムログを分析して、問題の根本原因を見つけたり、その他のさまざまな理由で調べることができます。

JDB Loggerの使用

*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で同様の結果を生成しますが、 stdout.log に追加情報があります。 ロガーの info メソッドを使用するのは、情報提供のみを目的としてメッセージを記録するためです。 以下は、stdout.logファイルのスナップショットです-

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

便利な関数* severe()、warning()、info()、config()、fine()、finer()、 finest()*を使用して、さまざまなレベルでメッセージを送信できます。 ここでは、finest()メソッドを使用して最高の情報を記録し、severe()メソッドを使用して重大な情報を記録できます。

link:/log4j/index [Log4J Framework]を使用して、重大度レベルと重要度に基づいてメッセージをさまざまなファイルに記録できます。

デバッグツール

NetBeansは、JSPおよびサーブレット仕様をサポートするスタンドアロンJavaアプリケーションおよびWebアプリケーションの開発をサポートする無料のオープンソースJava統合開発環境であり、JSPデバッガも含まれています。

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

  • ブレークポイント
  • コードのステップ実行
  • ウォッチポイント

上記のデバッグ機能を理解するには、* NetBeansドキュメント*を参照してください。

JDBデバッガーの使用

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

JSPまたはサーブレットをデバッグするには、 sun.servlet.http.HttpServer をデバッグしてから、HttpServerがブラウザーからのHTTP要求に応じてJSP/サーブレットを実行するのを観察します。 これは、アプレットのデバッグ方法と非常によく似ています。 違いは、アプレットの場合、デバッグされる実際のプログラムは sun.applet.AppletViewer です。

ほとんどのデバッガーは、アプレットのデバッグ方法を自動的に認識することにより、この詳細を隠します。 JSPで同じことをするまで、次のことを考慮してデバッガを支援する必要があります-

  • デバッガのクラスパスを設定します。 これは、 sun.servlet.http.Http-Server および関連するクラスを見つけるのに役立ちます。
  • デバッガのクラスパスを設定します。 これは、JSPおよびサポートクラス(通常は ROOT \ WEB-INF \ classes )を見つけるのに役立ちます。

適切なクラスパスを設定したら、 sun.servlet.http.HttpServer のデバッグを開始します。 デバッグに関心のあるJSPにブレークポイントを設定し、Webブラウザーを使用して、指定されたJSP *(http://localhost:8080/JSPToDebug)*のHttpServerに要求を行うことができます。 ここでの実行はブレークポイントで停止します。

コメントを使用する

コード内のコメントは、さまざまな方法でデバッグプロセスに役立ちます。 コメントは、デバッグプロセスで他の多くの方法で使用できます。

JSPはJavaコメントと*単一行(//…​)および*複数行(/…​*/)*コメントを使用して、Javaコードの一部を一時的に削除できます。 バグが消えたら、コメントしたコードを詳しく調べて問題を見つけてください。

クライアントとサーバーのヘッダー

JSPが期待どおりに動作しない場合、生のHTTPリクエストとレスポンスを確認すると便利な場合があります。 HTTPの構造に精通している場合は、要求と応答を読んで、それらのヘッダーで何が起こっているかを正確に確認できます。

重要なデバッグのヒント

ここに、JSPデバッグに関するいくつかのデバッグのヒントのリストがあります-

  • ブラウザに、表示しているページの生のコンテンツを表示するように依頼します。 これは、フォーマットの問題を特定するのに役立ちます。 通常は、[表示]メニューのオプションです。 ページの完全なリロードを強制することにより、ブラウザが以前のリクエストの出力をキャッシュしていないことを確認してください。 Netscape Navigator では、 *Shift-Reload を使用します。 Internet Explorer では、 Shift-Refresh を使用します。