SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Eclipse 3.4からはじめるIDE入門

Eclipse 3.4を使ったデバッグとテスト~Eclipse 3.4 入門~

第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

サーブレットのデバッグ

 Javaアプリケーションの場合、コンソールから状況を確認できまるので、Eclipseの機能を用いなくてもある程度のデバッグが可能です。しかし、サーブレットの場合、コンテナによってサーバ上で動作するため、デバッグが難しくなります。この問題に対しても、Eclipseの機能を利用すれば、サーブレットもJavaアプリケーションと同様にデバッグできるので、ぜひ活用したいところです。

 では、先ほど用いたHelloFuncクラスを呼び出すサーブレットを例にとって、これらの機能を利用してみましょう。第4回で作成したhellowebプロジェクトの中のhellotestパッケージを用います。この回から試す方は、第4回「Eclipse 3.4でのアプリケーション開発方法(swing/JSP/サーブレット)」を参照のうえ、次の作業を行ってください。

  • Tomcatのインストール
  • Tomcat Launcherプラグインのインストール
  • Tomcat Launcherプラグインの設定
  • Tomcatプロジェクト「helloweb」を作成
  • パッケージ名「hellotest」のサーブレット「DispRandom」を作成
  • デプロイ記述「web.xml」を作成

 そして、下記のとおりにHelloFuncクラスをhellotestパッケージにコピーして、HelloDebugクラスと同様の動作をするサーブレットをHelloDebugServletクラスとして作成します。また、このサーブレット用のデプロイ記述を加えます。

HelloFuncクラス(HelloFunc.java)
// HelloFuncクラス(HelloFunc.java)
package hellotest;
public class HelloFunc {
  // 整数の配列を受け取って、その総和を返す
  int sumArray(int[] p){
    for(int i = 1; i < p.length; i++){
      p[0] += p[i]; // 各要素の値を足しこむ
    }
    return p[0]; // 総和を返す
  }
}
HelloDebugServletクラス(HelloDebugServlet.java)
// HelloDebugServletクラス(HelloDebugServlet.java)
package hellotest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
public class HelloDebugServlet extends HttpServlet {
  static final long serialVersionUID = 1L;
  protected void doGet(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException {
    int[] i = {1, 2, 3}; // テスト用の配列
    int ans; // 総和を受け取る変数
    // 総和を求める関数を呼ぶ
    ans = new HelloFunc().sumArray(i);
    // 1+2+3=6が表示される
    res.getWriter().println("1+2+3=" + ans);
    // 1+2+4を試すため3を4に変更
    i[2] = 4;
    // 総和を求める関数を呼ぶ
    ans = new HelloFunc().sumArray(i);
    // 1+2+4=7が表示されるはずが…
    res.getWriter().println("1+2+4=" + ans);
  }
}
デプロイ記述(web.inf):追加後
<?xml version="1.0" encoding="Windows-31J"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
  <servlet-name>DispRandom</servlet-name>
  <servlet-class>hellotest.DispRandom</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>DispRandom</servlet-name>
  <url-pattern>/DispRandom</url-pattern>
</servlet-mapping>
<servlet>
  <servlet-name>HelloDebugServlet</servlet-name>
  <servlet-class>hellotest.HelloDebugServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>HelloDebugServlet</servlet-name>
  <url-pattern>/HelloDebugServlet</url-pattern>
</servlet-mapping>
</web-app>

 以上を作成・配置してTomcatを起動し、内部ブラウザから「http://localhost:8080/helloweb/HelloDebugServlet」を呼び出すと、Javaアプリケーションの場合と同様に誤まった結果が表示されてしまいます。

図18:内部ブラウザから呼び出すと正しい結果にならない
図18:内部ブラウザから呼び出すと正しい結果にならない

 では、デバッグ機能を使ってみましょう。

ブレークポイントの設定とデバッグモードへの移行

 Javaアプリケーションの場合と同様にsumArray(int[])メソッドを呼び出している2つの行に、ブレークポイントを設定します。しかし、サーブレットのデバッグでは、[デバッグアイコン]をクリックする必要はありません。内部ブラウザから呼び出すだけでデバッグモードに入ります。

図19:ブレークポイントを設定し、内部ブラウザから呼び出す(選択したURLへジャンプする)
図19:ブレークポイントを設定し、内部ブラウザから呼び出す(選択したURLへジャンプする)

 Javaアプリケーションの場合と同様にパースペクティブが「デバッグ」に切り替わり、デバッグビューと変数/ブレークポイントビューが表示されます。この後の手順はJavaアプリケーションの場合と変わりませんが、サーブレットからブラウザへの出力を確認するために、メニューの[ウィンドウ(W)]-[ビューの表示(V)]-[その他(O)]から内部Webブラウザを開くと便利でしょう。ただし、サーブレットの特性上、プログラムの出力が表示に反映するのはdoGetメソッドの終了後になります。

図20:デバッグパースペクティブに切り替わり、サーブレットがブレークポイントで停止している
図20:デバッグパースペクティブに切り替わり、サーブレットがブレークポイントで停止している

 なお、この手順は「Tomcat Launcherプラグイン」がTomcatを自動的にデバッグモードで起動してくれることに依存しています。そのため、デバッグを強制終了した場合などの次回デバッグ時に、デバッグモードにならないことがあります。その時は、[Tomcat再起動ボタン]をクリックして、Tomcatを起動しなおすと解決します。

次のページ
Eclipseのテスト支援機能 - JUnit(1)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Eclipse 3.4からはじめるIDE入門連載記事一覧

もっと読む

この記事の著者

平野正喜@ランドッグ・オーグ(ヒラノマサキ)

フリーのIT系執筆者&講使(※)の「ランドッグのマウ」こと平野正喜(HIRANO Masaki)です。【略歴】 1962年札幌市生まれ。今で言うIT企業のシステムエンジニア、プロジェクトリーダー、システムコンサルタント、採用担当などを経て独立し、2002年11月にランドッグ・オーグ平野正喜事務所(h...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3612 2009/02/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング