Eclipse を使用しての Java サーブレット・プログラム開発
Eclipse を使用して,Tomcat 上で動く,Java サーブレット・プログラム開発を行う.
- (前準備)新規サーバの定義
Eclipse 内部の tomcat サーバ(あとで説明する)を使えるようにするためには,Eclipse で 「新規サーバの定義」という操作を行う必要がある. (新規サーバの定義は,Eclipse で1回行うだけでいいです).
- Java サーブレットのプログラムの作成
Java サーブレットは,Java のクラスとして定義されることになる.作成は Eclipse 上で行う. 詳しくは,次の手順になる.
- 動的 Web プロジェクトの作成
- Java パッケージの作成
- サーブレットの作成
「サーブレット」というときは,URL と Java のクラスとのマッピング定義が必要になるため,単なる「Java のクラス」と「サーブレット」という言葉は区別することにします.
Eclipse を使わずにJava サーブレットのプログラムを作成する場合と比べると,Eclipse が,マッピング定義が自動で行ってくれるし,ディレクトリ作成も自動で行ってくれるという違いがあります.
- 動作テスト
Java サーブレットのプログラムのテストを行うために,「Eclipse 内部の tomcat サーバ」(あとで説明する)を使う. つまり,Java サーブレットの作成とテストとデバッグの一連の作業を,Eclipse 上で行う.
- エクスポート
動作テストが終わったら, Eclipse でエクスポート操作を行って, 公開 tomcat サーバ で動くようにします. ここでの「エクスポート」は簡単にいうと,Eclipse の配下にある各種ファイルを,公開 tomcat サーバが管理するディレクトリの下に コピーする操作です.
【この Web ページの目次】
- 新規サーバの定義とTomcat サーバ起動・停止
- Java サーブレット・プログラムの作成手順
- Java サーブレット・プログラムのテスト実行
- Java サーブレット・プログラムのデバッグ
- Java サーブレット・プログラムのエクスポート
【補足説明】
下記の 2つのサーバは別物です. 2つを同時に動かすことはできません(ポートを奪い合うことができないので).一方を動かすときは,もう一方を止めることになる.
- Eclipse 内部の tomcat サーバ:
Eclipse では,Eclipse 内部の tomcat サーバが動き, Java サーブレットの動作テストなどに使う.
- 公開 tomcat サーバ:
公開 tomcat サーバは Eclipse と独立した tomcat サーバです(Windows の場合は、例えばC:\tomcat60\bin\tomcat6w.exe 等で起動する Tomcat サーバのこと).当然, 公開 tomcat サーバが管理するディレクトリも Eclipse とは独立している.
必要となるソフトウェア
- Windows での Java JDK 18 (Java SE Development Kit 18) のインストールが済んでいること.
C:\Program Files\Java\jdk1.6.0_26 のようなディレクトリがあれば,インストール済み.
- Eclipse のWebページの記述に従って,Eclipse のインストールが終わっていること.
- Eclipse の 「Web, XML, and Java EE 及びエンタープライズ開発」に関するプラグインのインストールが終わっていること.
- Tomcat インストールが終わっていること.
設定項目
前もって,Tomcat のバージョンと、Tomcat インストールディレクトリを調べておいてください.
- Ubuntu の場合: 例えば /var/lib/tomcat7や/var/lib/tomcat6 のようになります
- Windows の場合: 例えば C:\tomcat60やC:\tomcat55 のようになります
- Tomcat のバージョン:
- Tomcat インストールディレクトリ: /var/lib/tomcat7
新規サーバの定義とTomcat サーバ起動・停止
ここでは,Eclipse で,新規サーバの定義を行う. その後,定義がうまくいったかを確認するために, Eclipse 内部の tomcat サーバの起動と停止を行ってみる.
新規サーバの定義
- 公開 tomcat サーバの停止
Windows の場合
Windows を使用する場合は,次のように操作する.
Windows では,C:\tomcat60\bin\tomcat6w.exe 等で停止しておく.
Ubuntu の場合は、「sudo service tomcat7 stop」のように操作して停止しておく。
* Ubuntu の場合の実行例
- Eclipse のサーバー (Servers) ビューの表示
- Eclipse で
「ウィンドウ (Window)」→「ビューの表示 (Show View)」→「その他 (Other)」→「サーバー (Server)」→「サーバー (Servers)」と操作する.
- 「OK」をクリックすると,これで,Eclipse ウインドウの中にサーバービューが表示される(下記).
* サーバービューが表示されないときは,Eclipse で 「ウィンドウ (Window)」→「パースペクティブを開く」→「その他 (Other)」→「Java)」 と操作した後,上記の操作をもう1度やり直すとうまくいくことがある.
- Eclipse で
「ウィンドウ (Window)」→「ビューの表示 (Show View)」→「その他 (Other)」→「サーバー (Server)」→「サーバー (Servers)」と操作する.
- 新規サーバーの定義
サーバー (Servers) ビュー内の任意の場所で,右クリックし,「新規 (New)」→「サーバー (Server)」と操作する
- サーバーの種類の選択
新規サーバ定義ウインドウが表示されるので, Apacheを展開し、Tomcat サーバーを選ぶ
* 下の実行例では、「Tomcat v7.0 サーバー (Tomcat v7.0 Server)」)を選択して,「次へ (Next)」をクリックしている. (インストールした Tomcat と同じバージョンのものを選ぶべき)
- インストール・ディレクトリーの設定
次のウインドウでは,「Tomcat インストール・ディレクトリー」を設定し,「終了」をクリック.
- Ubuntu の場合: 例えば /var/lib/tomcat7や/var/lib/tomcat6 のようになります
- Windows の場合: 例えば C:\tomcat60やC:\tomcat55 のようになります
* Ubuntu の場合の実行例
Ubuntu で「Eclipse での新規サーバの作成」ができないときのヒント
cd /var/lib/tomcat7/conf sudo ln -s policy.d/03catalina.policy catalina.policy chmod 644 tomcat-users.xml
- サーバー (Servers) ビューの確認
これで,Eclipse 内部の tomcat サーバについて,起動,停止,再起動,デバックモードでの起動を行うためのボタンなどが, サーバー (Servers) ビューの上端に表示されるようになる.
Eclipse 内部の Tomcat サーバ起動・停止
後で説明するように,Eclipse 内部の Tomcat サーバの起動と停止は自動で行われるのですが, 新規サーバの定義が正しくできたかの確認のために, 起動と停止を手動で行ってみる.
- サーバー (Servers) ビューを使う.
- サーバの起動ボタンをクリックするか,
サーバー (Servers) ビュー内の「Tomcat v7.0 Server (Tomcat v7.0 サーバー)」の行を右クリックして,
「Start (開始)」を選ぶと,Eclipse 内部の Tomcat サーバが起動する.
-
サーバー (Servers) ビュー内の「状況 (Status)」の欄が,Stopped になっていたのが,
始動済み (Started) に変わるので,起動できたことが確認できる.
これで起動される tomcat サーバは,Eclipse 内部の Tomcat サーバです.公開 tomcat サーバ (例えば Windows の場合は C:\tomcat60\bin\tomcat6w.exe) とは別ものです.
- 「コンソール」をクリックすると、サーバ機能に関するメッセージが表示されている
- Eclipse 内部の Tomcat サーバの停止も上記と同様の手順でできる.
【Eclipse 内部の Tomcat サーバがうまく起動できないときのヒント】
分かる限りでヒントを書いておきます.
-
すでに,「公開 Tomcat サーバを稼働させているよ」という場合には,
Eclipse 内部の Tomcat サーバが起動しない(ポートを奪い合うので)
◆ Ubuntu の場合の対処例
「sudo /usr/sbin/service tomcat7 stop」などを実行して 公開 Tomcat サーバを停止させて下さい.
◆ Windows の場合の対処例
C:\tomcat60\bin\tomcat6w.exe などを使って, 公開 Tomcat サーバを停止させて下さい.
- Eclipse を再起動するとうまくいくことがある.
- 公開 Tomcat サーバの設定ファイル(C:\tomcat60\conf\server.xml) 内にある「port="8080" についての記述」を書き換えていて,公開 Tomcat サーバと 8080 ポートで通信することはできないようにしている場合の話です. まずは,tomcat の設定ファイル(例えば /var/lib/tomat6/conf/servce.xml や C:\tomcat60\conf\server.xml のようなファイル名です)を確認してください.
【公開 Tomcat サーバと 8080 ポートで通信できる】
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
【公開 Tomcat サーバと 8080 ポートで通信できない (コメントにしているため)】
<-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->
公開 Tomcat サーバと 8080 ポートで通信することはできないようになっている場合には,次のことが考えられます.検討してください.
- Web ツール・プラットホーム (WTP) のインストールを行った時点で,すでに上記のように,「公開 Tomcat サーバと 8080 ポートで通信できない」ように設定されていたとする
セキュリティ上の理由で,このように設定されていることはよくある.
- Web ツール・プラットホーム (WTP) のインストール時に,公開 Tomcat サーバの設定が,Eclipse 内部の Tomcat サーバに引き継がれる.
自動で引き継がれるので仕方が無い
- しかし,Eclipse 内部の Tomcat サーバは,ポート 8080 での通信を必要とする.設定が邪魔になって動かない.
対処法ですが,再インストールが一番簡単のようです.
- 「新規サーバ定義」の削除
- tomcat のアンインストール
- tomcat の再インストール(このとき,設定ファイルには手を付けない)
- Eclipse の Web ツール・プラットホーム (WTP) の再インストール
- tomcat の設定ファイル
という手順になりそうです.
- Web ツール・プラットホーム (WTP) のインストールを行った時点で,すでに上記のように,「公開 Tomcat サーバと 8080 ポートで通信できない」ように設定されていたとする
Java サーブレット・プログラムの作成手順
以下,Eclipse を使う. プロジェクトの作成,クラスの定義と実行という一連の操作を,図解で説明する.
Eclipse の使用にあたって,事前に決めておく事項
Java サーブレット・プログラムを動かすために,Eclipse のプロジェクト等を作る. このページでは,Eclipse のプロジェクト名,Java パッケージ名,Java サーブレットのクラス名は次のように記述します. (すでに同じ名前のプロジェクトがある,といったときは,プロジェクト名を変えてください).
- Eclipse のプロジェクト名: hoge
- Java パッケージ名: hoge.hoge.com
- Java サーブレットのクラス名: HelloWorld
このページでは,Java サーブレットのクラスを1つ作る.
動的 Web プロジェクトの新規作成
下記の手順で,動的 Web プロジェクトを新規に作成する.
- (もし,プロジェクト・エクスプローラが開いていなければ)プロジェクト・エクスプローラを開く
「ウインドウ (Window)」→「ビューの表示 (Show View)」→「プロジェクト・エクスプローラ (Project Explorer)」 と操作する.
- プロジェクトの新規作成の開始
「ファイル」→「新規 (New)」→「プロジェクト (Project)」
または,プロジェクト・エクスプローラ内で,右クリック→「新規 (New)」→「プロジェクト (Project)」 - 「Web」の展開
新規プロジェクトのウインドウが開くので, 「Web」を展開する.
- 「動的 Webプロジェクト (Dynamic Web Project)」の選択
展開した「Web」の下にある 「動的 Webプロジェクト (Dynamic Web Project)」を選び, 「次へ」をクリック.
- プロジェクト名の設定など
設定用のウインドウが開くので,下記の設定を行う. 設定が終わったら,「次へ」をクリック.
- 「プロジェクト名 (Project name)」(name)(1行目): hoge と設定.
プロジェクト名は,好きな名前でよいが,スペースや全角文字は避けること. ここでは,プロジェクト名を,「hoge」と付けることにする.
- 「プロジェクト・コンテンツ (Project contents)」(2行目)では,ファイルの保存場所を指定する.
「デフォルト・ロケーションの使用 (Use default)」にチェックを入れたままで良い.
- 「ターゲット・ランタイム (Target Server)」 (3行目):「Apache Tomcat v7.0」になっていることを確認.
他のもの(例えば「なし」)になっていたら,「Apache Tomcat v7.0」に変更しておく
* 変更のとき,「なし」だけしか無くて,「Apache Tomcat v7.0」が候補として表示されない場合は, このページの上の方に書いている「新規サーバの定義」の手順を行う
- 「プロジェクト名 (Project name)」(name)(1行目): hoge と設定.
- 次の「プロジェクト・ファセット」は,デフォルトのままでよい
「次へ」をクリック.
* このウインドウが開かないことがある.気にしなくてよい.
- 「Java をビルドするためのプロジェクト構成」は,デフォルトのままでよい
「次へ」をクリック.
- 次の「Web モジュール」は,デフォルトのままでよい
「完了」をクリック.
- もし「関連付けられたパースペクティブを開きますか?」と聞いてきたら,「はい」をクリック
* このウインドウが開かないことがある.気にしなくてよい.
- 作成されたプロジェクトの確認
Java パッケージ作成
Eclipse のプロジェクト・エクスプローラを使って, Java パッケージを作成します. Java パッケージ名には hoge.hoge.com のようなドメイン名を付ける習慣があることに注意してください. このページでは,作成するJava パッケージ名は,hoge.hoge.com と書く. (Java パッケージ名を変えるときは,読み替えてください).
- (もし,プロジェクト・エクスプローラが開いていなければ)プロジェクト・エクスプローラを開く
「ウインドウ」→「ビューの表示」→「プロジェクト・エクスプローラ」 と操作する.
Java パッケージの作成,クラスの作成などの作業は,プロジェクト・エクスプローラで行う.
- Java パッケージを新規作成すべきプロジェクトの選択
プロジェクト・エクスプローラに,プロジェクト一覧が表示されているはずです. Java パッケージを新規作成したいプロジェクト名 hoge を右クリックして, 「新規」→「パッケージ」と操作する.
- Java パッケージ名の設定
「Java パッケージ (Java package)」の名前として,Java パッケージ名 hoge.hoge.comを記入する.
その後,「終了」をクリック.
- Java パッケージの確認
プロジェクト・エクスプローラにおいて, Java パッケージ hoge.hoge.com が増えていることを確認する.
* プロジェクト・エクスプローラで, Java パッケージ名 hoge.hoge.comが表示されていないときは, プロジェクト hoge の左横の「+」をクリックして展開した後, 下の 「Java リソース; src」または「src」の左横の「+」をクリックして展開して下さい.
サーブレットの作成
サーブレットの作成の手順は次の通りです. 前準備として,Java パッケージ hoge.hoge.com を作成済みであること.
- 新規サーブレットの作成の開始
プロジェクト・エクスプローラにおいて, サーブレットを作成したいJava パッケージ名 hoge.hoge.com を右クリック.
* プロジェクト・エクスプローラで, Java パッケージ名 hoge.hoge.comが表示されていないときは, プロジェクト名の下の 「Java リソース; src」または「src」の下を展開して下さい.
- 「新規 (New)」→「その他 (Other)」と操作する.
- サーブレットの選択
サーブレットを作成したいので, 「Web」→「サーブレット (Servlet)」と操作し, 「次へ」をクリックします.
- サーブレットのクラス名等の指定
新規に作成するサーブレットについて,Java パッケージ名,クラス名等を入力できるウインドウが開くので,設定を行う.
- 「Java パッケージ (Java package)」(3行目): Java パッケージ名
「hoge.hoge.com」を設定.
* 「hoge.hoge.com」になっていなければ修正すること.
- 「クラス名」(4行目の「名前」のところ): Java サーブレットのクラス名 HelloWorld
- 「Java パッケージ (Java package)」(3行目): Java パッケージ名
「hoge.hoge.com」を設定.
- 次はデフォルトのままでよい
「次へ」をクリックします.
- 次はデフォルトのままでよい
「完了」をクリックします.
- 作成されたクラスの確認
参考: Eclipse インストールと基本操作のWebページ
クラス定義と実行
- プロジェクト構成物の表示
プロジェクト・エクスプローラで, プロジェクト名 hoge の左横の三角形あるいは「+」をクリックして展開すると,「Java リソース; src」などが現れる(その他,いろいろ,プロジェクトの構成物が現れる).
* すでに展開済みのときは,この手順は不要.
- Java パッケージ一覧の表示
プロジェクト・エクスプローラで, 「Java リソース; src」の左横の三角形あるいは「+」をクリックして展開すると,Java パッケージ一覧などが現れる.
* すでに展開済みのときは,この手順は不要.
- クラスファイル一覧の表示
プロジェクトエクスプローラで, 先ほど作成したJava パッケージ名 hoge.hoge.com の左横の三角形あるいは「+」をクリックすると, クラスファイル一覧が現れる.
* すでに展開済みのときは,この手順は不要.
- 定義したいクラスのファイルを開く
HelloWorld クラスを定義したいので, プロジェクト・エクスプローラの クラスファイル一覧の中から, 「HelloWorld.java」をダブルクリックします. すると,エディタが開きます.
このように,Eclipse のプロジェクト・エクスプローラで,定義したいクラスの「クラス名.java」 をダブルクリックすると,エディタが開くことになっています.
* なお,別のクラスを追加したいときは, Java パッケージ名を右クリックして「新規」→「クラス」です.
- エディタでクラス HelloWorld を定義する
下記のクラス定義をカットアンドペーストして下さい(見本として作ったクラス定義です). (Java パッケージ名を「hoge.hoge.com」と書いているので,Java パッケージ名を別の名前にしている場合には,適切に読み替えてください).
【プログラムの要点】
- doGet() メソッドの中に,次のように,表示したい Web ページの中身を生成するプログラムを書く.
- Web ブラウザが,所定の「リクエスト URL」を使って Web ページを読み込もうとすると,
HelloWorld クラスの doGet() メソッドが自動的に呼び出されるようになるということです.
response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>HelloWorld</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>HelloWorld</h1>"); out.println("</body>"); out.println("</html>"); out.close();
クラス定義は次のようになります
package hoge.hoge.com; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloWorld */ @WebServlet("/HelloWorld") public class HelloWorld extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloWorld() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>HelloWorld</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>HelloWorld</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
*同じ方針で,例えば,リレーショナルデータベースの中身を取り出して Web ページを作ることも簡単にできる.
- ソースを保存
「ファイル」→「保管」または CTRL+S で保存される. 保存時にコンパイルされる
コンパイル時のエラーや警告があれば, Eclipse 内の問題・ビューに表示されるので確認する.
- 下記の「Java サーブレット・プログラムのテスト実行」に進んでください.
Java サーブレット・プログラムのテスト実行
Eclipse のプロジェクト・エクスプローラを使用して,上記で作ったJava サーブレットのプログラム をテスト実行してみる.
- 実行したいサーブレットのクラスを選び,右クリック
Eclipse のプロジェクト・エクスプローラで,実行したいクラス名.java (つまり HelloWorld.java) を右クリック
-
「実行 (Run As)」→「サーバーで実行 (Run on Server)」と操作
- サーバの選択
ウインドウが開くので, 「ローカルホストの Tomcat v7.0 サーバ」が選択されていることを確認の後,「次へ (Next)」をクリック.
- 次はデフォルトのままでよい
「完了」をクリック.
- サーバを再起動するかを聞いてくる場合がある
再起動する.
- 下記のエラーが出て,Eclipse 内部の Tomcat サーバが起動しない場合には,公開 Tomcat サーバが稼働中である可能性がある。もしそうなら公開 Tomcat サーバを停止する
「公開 Tomcat サーバを稼働させている」ときは, Eclipse 内部の Tomcat サーバが起動しない(ポートを奪い合うので)ので, 公開 Tomcat サーバを停止させて下さい.
- Eclipse 内部の Tomcat サーバが起動することを確認
コンソール・ビューに表示される.
- 実行結果の確認
Web ブラウザが開き,そこに実行結果が出る. 「Hello Java World!」と出れば成功.
実行で,エラーが出る場合,
Eclipse 内部の Tomcat サーバを停止して、もう1度起動してみる。(これは、プログラムを Tomcat に読み込ませるため)。
それでもうまく動かない場合は,Eclipse を再起動してみる.
Web ブラウザ内のアドレスバーの部分には,Tomcat サーバに対するリクエスト URL が表示されます.
http://localhost:8080/hoge/HelloWorld
のようになっていることを確認しておきます.(「hoge」の部分は,プロジェクト名に読み替えること)
Java サーブレット・プログラムのデバッグ
今度は,プロジェクト・エクスプローラを使用して,Servlet プログラムのデバッグを行う.
デバッグ実行(ブレークポイント無し)
- Eclipse のプロジェクト・エクスプローラで,デバッグを行いたいクラス名.java (つまり HelloWorld.java) を右クリックし, 「Debug As (デバッグ)」→「Debug on Server (サーバーでデバッグ)」を選ぶ.
- ウインドウが開くので,「Choose an existing server (既存のサーバを選択)」の方をチェックしておく.「次へ (Next)」→「次へ (Next)」→「終了 (Finish)」
- Tomcat のサーバが起動する(結果は,コンソール・ビューに表示される).
デバッグモードでのサーバが起動できたことを確認したいときは, サーバー (Servers) ビューの「状況 (Status)」の欄が「デバッグ (Debugging)」になっているかを見る.
- (まだ,doGet メソッド内にブレークポイントが無いので)Web ブラウザが開く.
このウインドウに「Hello World!」と出れば成功.
*ブレークポイントが無いので,普通の「実行」と,デバッグ用の「実行」の違いがありません.
デバック実行(ブレークポイント有り)
- エディタを開く
Eclipse のプロジェクト・エクスプローラで,デバッグを行いたいクラスの「クラス名.java 」をダブルクリック (ここでは,HelloWorld.javaをダブルクリック)すると,エディタが開きます.
- ブレークポイントの設定(2個以上)
HelloWorld.java の doGet メソッド内に ブレークポイントを設定します.
エディタで, doGet メソッド内の任意のプログラムコードについて,エディタの左端フレームをダブルクリックするか, エディタの左端フレームで,右クリックして,「Toggle Break Point (ブレークポイントの切り替え)」を選ぶ.
ブレークポイントが設定されると,青色の丸で表示される.
後の練習のため,ブレークポイントは2個以上作っておく
- ブレークポイントの設定が済んだら,上記の「デバッグ実行」の手順をもう一度繰り返します.
今度は,ブレークポイントを作ったので,プログラムの実行が止まる. 今度は,Web ブラウザが開かず,デバッグ用の画面に切り替わります(この画面を「デバッグ・パースペクティブ」と呼びます).
* なお,普段開いている画面は,「Javaパースペクティブ」です. 「デバッグ・パースペクティブ」と「Javaパースペクティブ」の切り替えは, 「ウインドウ (Window)」→「(Open Perspective) パースペクティブを開く」で(デバッグ中ならいつでも)出来ます.
- デバッグ・ビューの確認
スレッド [http-8080-processor??] (実行中)のような表示がたくさん並んでいるのがデバッグ・ビューです.
* もし,デバッグ・ビューが開いていなければ,「ウインドウ (Window)」→「Show View」→「Debug」で,デバッグ・ビューを開く.
デバッグ・ビューがどこにあるのか分からないときも, 「Window」→「Show View」→「Debug」で,デバッグ・ビューが簡単に分かる.
- HelloWorld.java をエディタで開く
ウインドウの中に「エディタ」があります.「HelloWorld.java」をクリック
- HelloWorld の確認
エディタに,HelloWorld.java のソースコードが出たはずです. ソースコード中にマークがあり,現在,この行で,プログラムの実行が中断していることを示す.
- デバッグ・ビューでの操作
デバッグ・ビューの中の任意の場所を 左クリックすると,デバッグ機能が動くようになる. F8(ファンクション8) で,次のブレークポイントまで実行が進むなど,機能を試してみよう.
- F5: ステップイン
- F6: ステップオーバー
- F7: ステップリターン
- F8: Resume
なお,デバッグ・ビューの中の任意の場所を 右クリックすると,デバッグ機能を選ぶウインドウ開きます.
- デバッグ用の画面 (デバッグ・パースペクティブ)」から,元の Java パースペクティブに戻るのは簡単です.
「ウインドウ (Window)」→「(Open Perspective) パースペクティブを開く」→「Java」
以上で,Eclipse でのデバッグ実行ができるようになりました.
Java サーブレット・プログラムのエクスポート
上記では,Eclipse 内部の Tomcat サーバを使っていました.
今度は, Java サーブレット・プログラムを,Eclipse から切り離して,公開 tomcat サーバ上で動く(つまり, 単体で動く)ようにします. そのために,Eclipse のエクスポート (Export) 機能を利用します.
Eclipse のエクスポート機能が行っていること
公開 tomcat サーバ上で Java サーブレットを動かすために 「リクエスト URL ← マッピング → サーブレット名 ← マッピング → クラス名」という形式でのマッピングを行うとともに, 所定のディレクトリに Java クラスのファイルなどを置く必要がある.(詳しくは 「Tomcat 上で動く Java サーブレット・プログラム」の Web ページを見てください).
Eclipse でのエクスポート操作を行うと,このマッピング定義と,所定のディレクトリへのファイルの配置が自動で行われます.詳しくは以下の通りです.
- Eclipse は,マッピング定義ファイル (web.xml) を自動生成する
- Eclipse は,Java クラスのファイルを所定の場所に置く.
- Eclipse は,サーブレット名,URL パターンを自動的に付ける など
Java クラスのファイル,ライブラリファイル,web.xml が置かれるディレクトリは, サーブレット配置サブディレクトリと,Tomcat インストールディレクトリから決まります.
前準備
前もって,Tomcat インストールディレクトリを調べておいてください.
- Ubuntu の場合: 例えば /var/lib/tomcat7や/var/lib/tomcat6 のようになります
- Windows の場合: 例えば C:\tomcat60やC:\tomcat55 のようになります
このページでは次のように書く.
- Tomcat インストールディレクトリ: /var/lib/tomcat7
サーブレット配置サブディレクトリは,自由に決めることができる(プロジェクト名と一致させるなどのルールはありません). Eclipse でのエクスポート時点に,手動で自由に設定することになる. このページでは次のように書く.
- サーブレット配置サブディレクトリ: hogename
Java クラスのファイル,ライブラリファイル,web.xml が置かれるディレクトリは,次のようになる.
- Java クラスのファイルが置かれるディレクトリ: /var/lib/tomcat7/hogename/WEB-INF/classes/hoge/hoge/com
「/hoge/hoge/com」が付いているのは,Java パッケージ名が hoge.hoge.com だからです.
- ライブラリファイルが置かれるディレクトリ: /var/lib/tomcat7/hogename/WEB-INF/lib
- web.xml が置かれるディレクトリ: /var/lib/tomcat7/hogename/WEB-INF
エクスポートの手順
- プロジェクト・エクスプローラで,先ほど作ったプロジェクト を右クリック.「エクスポート」を選択(ファイル→エクスポートでも良い)
- 「WAR ファイル」を選ぶ
- ファイル名等の指定
WARエクスポートダイアログで,次のように指定する.
- Webモジュール: プロジェクト名である「hoge」を指定.
- 宛先:「/var/lib/tomcat7/webapps/hogename.war」
* サーブレット配置サブディレクトリが hogename なので,宛先は上記のようになる.
- ソースファイルのエクスポート: チェックする
- 既存ファイルを上書き: チェックする
「完了」をクリックすると,エクスポートが実行される
- WAR ファイルの確認
/var/lib/tomcat7/webapps/ 下に,拡張子 .war が付いたファイルができる.
- (オプション)web.xml の確認
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name> hoge2</display-name> <servlet> <description> </description> <display-name> HelloWorld</display-name> <servlet-name>HelloWorld</servlet-name> <servlet-class> hoge.hoge.com.HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
次のように設定されていることが読み取れます.
- Java サーブレットのクラス名(完全修飾形式): hoge.hoge.com.HelloWorld
Java のパッケージ名が hoge.hoge.com,クラス名が HelloWorld の場合, 完全修飾形式でのクラス名は,hoge.hoge.com.HelloWorldになります
- サーブレット名 : HelloWorld
サーブレット名は,Eclipse が自動的に,クラス名と同じものを付ける.
- URL パターン : HelloWorld
URL パターンは,Eclipse が自動的に,クラス名と同じものを付ける.
サーブレット配置サブディレクトリ hogename と, サーブレットのURL パターン HelloWorld から,リクエスト URL が http://localhost:8080/hogename/HelloWorld のように決まります.
つまり,リクエスト URL である http://localhost:8080/hogename/HelloWorld と,Java クラスである HelloWorld との間のマッピング定義は,Eclipse が自動的に行っているということが見て取れます. 「マッピング」の意味は, Web ブラウザを使って,この リクエスト URL にアクセスしたとき,HelloWorld クラスの doGet() メソッドが自動的に呼び出されるようになるということです. 「8080」は Tomcat のポート番号です.
* マッピング定義の中身を理解したい人のための演習は別の Web ページに用意している.
- Java サーブレットのクラス名(完全修飾形式): hoge.hoge.com.HelloWorld
- 動作確認
公開 Tomcat サーバを起動した後に, 普通の Web ブラウザで,
http://localhost:8080/hogename/HelloWorld
を開くと,Hello World と表示されます. 「hogename」と書いているのは,先ほどエクスポートするときに付けた 指定した「サーブレット配置サブディレクトリ」のことです(.war ファイルのファイル名にもなっています).
上記の例では,8080 ポートを使い,公開 tomcat サーバと通信している.
Apache との連携
上記では,8080 ポートを使い,公開 tomcat サーバと通信しました. URL の中に,「8080」と書かずに,普通の URL で Java サーブレットを起動できるように するには,Apache のような Web サーバと連携させるのが普通です.
前もって必要なソフトウェア
- Apache Tomcat コネクタの設定を行う必要がある.
- httpd-proxy.conf ファイルでの設定を行う必要がある.
- Apache 側の conf/extra/httpd-proxy.conf の設定
httpd-proxy.conf は、以下のように設定します。 Order と Allow の行は、「127.0.0.1」からのアクセスだけを許すという設定です。
<Location /<エクスポートするプロジェクト名>/> ProxyPass ajp://localhost:8009/<エクスポートするプロジェクト名>/ Order allow,deny Allow from 127.0.0.1 </Location>
- Apache を再起動
conf/extra/httpd-proxy.conf を書き換えたから。
- Apache での動作確認
URL は次の通り
- Apache サーバ経由でサーブレットに接続:
(http://localhost/<エクスポートするプロジェクト名>/クラス名) または, (http://localhost/<エクスポートするプロジェクト名>/JSPファイル名.jsp)
Strutsを使っている場合,ページ遷移すると, http://localhost/<プロジェクト名>/アクション名.do のような URL が現れることを確認しておく.(つまり,http://localhost/<プロジェクト名>/アクション名.do と打ち込むことで,一種の単体テストが出来る)
- Apache サーバ経由でサーブレットに接続:
参考Webページ
参考Web ページ: http://www.stackasterisk.jp/tech/java/wtp02_03.jsp (現在は存在しない)
参考Web ページ: http://www.stackasterisk.jp/tech/java/wtp02_01.jsp (現在は存在しない)