S-JIS[2009-10-09/2009-11-20]

Eclipse WTP(Web開発環境)

WTP(Web Tools Platform)は、Web(サーバーアプリ)の開発を行う為の開発環境(プラグイン)。
Pleiades All in One Eclipse3.4にはデフォルトで入っている。

Eclipse上でJSPサーブレット(あるいはStruts)でコーディングし、EclipseからTomcatを起動して、作成したWebアプリを動かすことが出来る。


動的Webプロジェクト

Webアプリを作成する為のプロジェクトは、通常のJavaプロジェクトとちょっと違う。
「動的Webプロジェクト」というものを作成して使う。

  1. 「新規プロジェクト」ダイアログを開く。
  2. 「Web」ディレクトリー内の「動的Webプロジェクト」を選んで「次へ」
    (なお、「静的Webプロジェクト」はHTMLのみを作成する為のプロジェクトらしいので、今回は無関係)
  3. プロジェクト名」等を入力して「次へ」
    項目 デフォルト値 説明
    プロジェクト名 (必須)  
    動的Webモジュールバージョン 2.4 サーブレット仕様のバージョン
    デフォルトで生成されるweb.xmlのDTD/XMLスキーマに関わる。
    つまり、web.xmlの中で使える要素が異なってくる。
    taglib要素
  4. 「コンテキスト・ルート」「Webコンテンツ・フォルダー名」を入力して「終了」
    項目 デフォルト値 説明
    コンテキスト・ルート プロジェクト名 コンテキストルートにaaaを指定した場合、実行時は
    http://localhost:8080/aaa/
    にアクセスすることになる。
    後からコンテキストルートを変更する方法
    Webコンテンツ・フォルダー名 WebContent プロジェクト名がpppでフォルダー名がWebContentの場合、
    workspace/ppp/WebContent/
    の下にJSPファイルを置いたりWEB-INFが出来たりする。

コンテキスト・ルートを後から変更したい場合は、以下の場所から変えられる。

  1. プロジェクトのプロパティーを開く。
  2. 左側のツリーから「Webプロジェクトの設定」を選択する。
  3. 右側の「コンテキスト・ルート」を入力する。

ただ、これを変えたからと言って、すぐに影響が出るわけでは無いようだ(汗) [2009-10-14]
(プロジェクトを更新してもサーバーを再起動しても、ブラウザーからアクセスする際のURLが変わってくれない)

サーバーの設定を行うと、「Servers」というEclipseプロジェクトが作られる。
ここにサーバーの設定ディレクトリー(例えば「ローカル・ホストのTomcat5.5サーバー-config」)が作られ、設定ファイルが置かれる。
Tomcatのserver.xmlファイルもここにあり、このファイルの中にコンテキスト・ルートが書かれている。

<Context docBase="プロジェクト名" path="/コンテキストルート" reloadable="true" source="org.eclipse.jst.j2ee.server:プロジェクト名"/>

したがって、ここを手で書き換えて、Eclipseを再起動すると反映される。
(ブラウザーからアクセスする際のコンテキスト・ルートがここで指定したものになる。サーバーを再起動しただけでは変わってくれないようだ…)

もしくは、サーバービューからサーバーを一旦削除して再作成するか、
サーバーからプロジェクトを一旦除去して再び追加すると、
「Webプロジェクトの設定」で入力したコンテキスト・ルートがserver.xmlに書かれる。
(新しくcontext要素が作られるので、手で何か追加していた場合は消えてしまうが…)

実行時に実際に使われるserver.xml


サーバービュー

サーバービューは、サーバー(例えばTomcat)を起動・停止させる為のビュー。

以下、Tomcat5.5を扱う場合の例。

  1. まずTomcatをインストールしておく。
  2. サーバービューを開く。
    1. メニューバーの「ウィンドウ(W)」→「ビューの表示(V)」→「その他(O)」で「ビューの表示」ダイアログを開く。
    2. 「サーバー」ディレクトリー内の「サーバー」を選択して「OK」ボタンを押す。
  3. サーバービューで、Tomcatを登録する。
    1. サーバービュー上で右クリック→「新規(W)」→「サーバー」で「新規サーバー」ダイアログを開く。
    2. 「Apache」ディレクトリー内の「Tomcat v5.5 サーバー」を選択して「次へ」
    3. 「Tomcatインストール・ディレクトリー(D)」にインストールしたディレクトリーを指定して「終了」
      (例:C:\apache-tomcat-5.5.23)
  4. サーバーに実行するWebアプリ(Webプロジェクト)を登録する。
    1. サーバービュー上で登録対象のサーバーを選択する。
    2. 右クリック→「プロジェクトの追加および除去(P)」で「プロジェクトの追加および除去」ダイアログを開く。
    3. 左側の「使用可能なプロジェクト」一覧から追加したいWebプロジェクトを選択し、「追加(D) >」ボタンを押すと
      右側の「構成プロジェクト」一覧に移動する。
      逆に右側で選んで「< 除去(D)」ボタンを押すと起動対象から外せる。

設定の変更方法(サーバーエディター)


サーバーの起動・停止

サーバーを起動するには、サーバービューの右上にある「サーバーを始動」ボタン(あるいは「デバッグ・モードでサーバーを始動」ボタン)を押す。
既に起動中の場合にこのボタンを押すと、再起動される。
サーバーが起動されると、登録されているWebアプリが実行できるようになる。(もちろん、エラーが出なければ、だが^^;)

起動したら、別途ブラウザーを起動し、「http://localhost:8080/コンテキストルート/」でWebアプリにアクセスする。

サーバーを停止するには、サーバービューの右上にある「サーバーを停止」ボタンを押す。
サーバーを起動するとコンソールビューに切り替わってログが出るが、そこの「終了」ボタンでは停止させない方がいい。
いわば「停止」はshutdown.batを実行するようなもので、「終了」はTomcatのコンソール(JavaVM)を直接落とすようなものだから。


サーバーを開始(起動)しようとした際に、開始タイムアウト時間(デフォルト:45秒)を過ぎても完了しなかった場合は、「問題が発生」ダイアログが出て起動が失敗する。[2009-11-20]

タイトル 問題が発生
メッセージ サーバー ローカル・ホスト の Tomcat v5.5 サーバー は 45 秒以内に始動できませんでした。
サーバーがより多くの時間を必要とする場合、サーバー・エディターでタイムアウトを大きくしてください。
  サーバー・エディター

サーバーを終了(停止)しようとした際に、終了タイムアウト時間(デフォルト:15秒)を過ぎても終了しなかった場合は、「サーバーの終了」ダイアログが出る。

タイトル サーバーの終了
メッセージ サーバー ローカル・ホスト の Tomcat v5.5 サーバー は応答していません。
このサーバーを終了しますか?
サーバーを終了するには「OK」をクリックし、待機して続行するには「キャンセル」をクリックしてください。
  「OK」ボタンを押すと強制終了する。

サーバービューを使用せず、Webプロジェクトから実行することも出来る。

  1. Webプロジェクトを右クリックして「実行(R)」→「サーバーで実行」で「サーバーで実行」ダイアログが開く。
  2. 「既存のサーバーを選択(X)」を選択して「終了」
  3. Eclipse上でブラウザーが起動し、「http://localhost:8080/コンテキストルート/」が実行される。

実行しようとする度に毎回ダイアログが出るので、それが面倒な場合は、「サーバーで実行」ダイアログ内の「このプロジェクトを実行するときは常にこのサーバーを使用(P)」にチェックを入れておくとよい。

また、JSPファイルを直接右クリックして実行することも出来る。
この場合はEclipse上でブラウザーが起動し、そのJSPに直接アクセスされる。
ただし、サーバーの再起動がかかった場合はブラウザーが開く方が早くてエラーになることがあるので(苦笑)、サーバーの起動が終了してからブラウザーで「現行ページのリフレッシュ」を行う。
なお、WEB-INFの下にあるJSPファイルは、この方法では当然エラーになる。(WEB-INFの下には外部からアクセスできない仕様だから)


Tomcatの起動オプション

Tomcatの起動時にJavaVMの実行時引数を指定(追加)したい場合は、以下のようにする。

  1. 一度サーバーを実行する。
  2. 「実行の構成」ダイアログを開く。
  3. 左のツリーから「Apache Tomcat」⇒「ローカル・ホストのTomcat v5.5サーバー」を選択する。
  4. 右側の「引数」タブを選択する。
  5. 「VM引数(G)」を設定する。

ちなみに、自分の環境では、デフォルトで以下のようなVM引数が指定されていた。

-Dcatalina.base="C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0"
-Dcatalina.home="C:\apache-tomcat-5.5.23"
-Dwtp.deploy="C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps"
-Djava.endorsed.dirs="C:\apache-tomcat-5.5.23\common\endorsed"

Tomcatのワークディレクトリー

Tomcatの実行時のワークディレクトリーは、起動オプションcatalina.base(かwtp.deploy)で指定された場所に作られる。[2009-10-14]
(「実行の構成」上で変更しようとしても出来ないっぽい…)

ディレクトリー ファイル 説明・備考
C:\workspace\
.metadata\
.plugins\
org.eclipse.wst.server.core\
tmp0
conf catalina.policy
catalina.properties
context.xml
server.xml
tomcat-users.xml
web.xml
Serversプロジェクトのサーバーの下の設定ファイルから作られるようだ。
(ほとんどコピーで、一部がディレクトリーに合わせて書き換えられる)
logs    
temp    
webapps    
work\
Catalina\
localhost\
コンテキストルート
  SESSIONS.ser
tldCache.ser
 
org\
apache\
jsp
*_jsp.java
*_jsp.class
JSPファイルをコンパイルしたJavaソースと
それをコンパイルしたclassファイル。
wtpwebapps ROOT    
プロジェクト名 *.jsp
WEB-INF
META-INF
プロジェクトのWebContetの下のファイルがコピーされているようだ。

JSPファイルからコンパイルされたJavaソースを参照する方法

JSPファイルからコンパイルされたJavaソースファイルをテキストエディターで開けば見られるけども。[2009-10-14]
以下のように設定しておけば、Eclipseから見られる。

  1. 「ビルド・パスの構成」を開く
  2. 「ライブラリー(L)」タブを選択する。
  3. 「外部クラス・フォルダーの追加(F)」ボタンを押して「外部クラス・フォルダーの選択」ダイアログを開く。
  4. 「フォルダ」にJSPのclassファイルの入っているディレクトリーを入れる。
    例:C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\コンテキストルート
  5. 「OK」ボタンを押して完了。

Javaソースファイルもclassファイルと同じ場所にあるので、Ctrl+Shift+T等でクラスファイルを開けばソースを見ることが出来る。
ただし、Javaソースは(仕様として正しく)UTF-8で作られているので、日本語は文字化けしちゃうかも…。

ソースの方をビルドパスに加えてしまえばエンコードを指定できるので文字化けを解消できる。

  1. 「ビルド・パスの構成」を開く
  2. 「ソース(S)」タブを選択する。
  3. 「ソースのリンク(I)」ボタンを押して「ソースのリンク」ダイアログを開く。
  4. 「リンクされるフォルダーのロケーション(L)」にソースの入っているディレクトリーを入れる。
    「フォルダー名」は、自動的に入れられる。
    例:ロケーション:C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\コンテキストルート
      フォルダー名:コンテキストルート
  5. 「終了」ボタンを押してビルドパスの構成に戻る。
  6. 「OK」ボタンを押してビルドパスの構成を終了する。
  7. パッケージ・エクスプローラーで、リンクしたソースディレクトリーを右クリック→「プロパティー(R)」でプロパティーダイアログを開く。
  8. 左ツリーから「リソース」を選択する。
  9. 右ペインの「テキスト・ファイル・エンコード(T)」で「その他(O)」を選択し、「UTF-8」を選ぶ。

ただし、ソースとして加えるとコンパイルされて実行時のライブラリーとして加わってしまうので、注意が必要かも。
別プロジェクトを作ってそちらにソースリンクを作ればコンパイルされても影響は無いはずだし、ソースも見ることが出来る。

いずれの方法でも、JSP実行時(HTMLの生成時)に例外が発生してEclipseのコンソールにスタックトレースが出ている状態で
JSPのJavaソース名部分をクリックすることで、Javaソースに飛ぶことが出来るようになる。


Web Appライブラリー

Webプロジェクトには、(ユーザーライブラリーやJREシステム・ライブラリーの親戚(?)で)Webアプリ用のライブラリーが自動的に用意されている。
WebContent/WEB-INF/lib/」の下にjarファイルを置くことで、自動的に「Web Appライブラリー」に追加される。

ただ、Eclipseのバージョンによっては(?)、libに追加した直後はEclipseに反映されないこともある。
F5キーで更新(リフレッシュ)しても反映されない)
一度Eclipseを再起動するか、プロジェクトを閉じて開き直すと反映されるようだ。
(パッケージエクスプローラーでプロジェクトを右クリック→「プロジェクトを閉じる(S)」「プロジェクトを開く(E)」)

参考: えっさんのeclipseでWeb App ライブラリーにクラスパスを通す方法


サーバー・ランタイム

HttpServletタグリブ(JSPカスタムタグ)TagSupportといったJavaEE関連(パッケージがjavax)のクラスを使いたい場合、そのjarファイルをWebプロジェクトビルドパス)に追加する必要がある。
Tomcat等のJavaEEのjarファイルを個別にビルドパスに指定しなくても、登録したサーバーそのものをライブラリーとして指定することが出来る。
つまり、Tomcatの実行時のjarファイル全てをビルドパスに加えることになる。

  1. ビルドパスの構成を開く。
  2. 「ライブラリー(L)」タブを選択する。
  3. 「ライブラリーの追加(A)」ボタンを押して「ライブラリーの追加」ダイアログを開く。
  4. 「サーバー・ランタイム」を選択して「次へ」
  5. 「クラスパスに追加するランタイムを選択(R)」で「Apache Tomcat v5.5」を選択して「終了」

サーバー・エディター

サーバーエディターは、サーバー(例えばTomcat)の設定を変更する為の画面。[2009-11-20]

サーバーエディターは以下のようにして開く。

サーバーエディターでは、以下のような項目を設定できる。

設定項目 デフォルト?の値 説明・備考
一般情報 サーバー名 ローカル・ホスト の Tomcat v5.5 サーバー  
ホスト名 localhost  
ランタイム環境 Apache Tomcat v5.5  
構成パス /Servers/ローカル・ホスト の Tomcat v5.5 サーバー-config 設定ファイル類が置かれる場所
公開中 公開間隔(秒) 1 リソースの変更時に自動的に反映する設定?
タイムアウト 開始(秒) 45 サーバー開始時に この設定時間までに完了しなかったら、起動自体が異常終了する。
終了(秒) 15 サーバー終了時に この設定時間までに完了しなかったら、強制終了をするかどうか確認するダイアログが出る。
ポート Tomcat管理ポート 8005 server.xmlの「<Server port="8005" 〜>
HTTP/1.1 8080 server.xmlの「<Connector 〜 port="8080"  〜/>
AJP/1.3 8009 server.xmlの「<Connector 〜 port="8009" protocol="AJP/1.3" 〜/>

Strutsのインストール

Strutsにはインストーラーとかは無いので、自分でライブラリーやtldファイルを配置する必要がある。

jarファイルはWeb Appライブラリーに入れればいい。

tldファイルを置く場所はWebプロジェクトの初期状態では作られていないので、用意しておく。
Struts1.3.10のtldファイルは「META-INF/tld/」の下に入っているから、「WebContent/META-INF/tld/」という感じでいいかなぁ。
(WEB-INFの下に置くものだというイメージがあったけど、どうなんだろう?)

JSPファイル内でtldファイルを指定する場合は以下のようになる。

<%@taglib uri="/META-INF/tld/struts-html.tld" prefix="html" %>

もしくは、web.xml経由で指定する

<%@taglib uri="/struts-html" prefix="html" %>

WebContent/web.xml:

<?xml version="1.0" encoding="Windows-31J"?>
<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">
〜
	<welcome-file-list>
		〜
	</welcome-file-list>

	<jsp-config>
		<taglib>
			<taglib-uri>/struts-html</taglib-uri>
			<taglib-location>/META-INF/tld/struts-html.tld</taglib-location>
		</taglib>
	</jsp-config>
</web-app>

※バージョン2.4では、taglibはjsp-configの下に書くことになったらしい。(バージョンは、Webプロジェクト作成時に指定している)
 また、要素を書く順番も厳密になったらしい。
参考: @ITのJ2EE 1.4に対応したweb.xmlを記述する

サーブレット2.3のtaglibの書き方


Eclipseへ戻る / 技術メモへ戻る / Javaサーブレットへ行く / Strutsへ行く
メールの送信先:ひしだま