連載
» 2007年04月19日 00時00分 公開

やり直し「JSPとTomcat」(12):Webアプリケーションのパッケージングを「やり直す」 (1/2)

Javaを途中までかじったが挫折した。やはりJavaプログラマにスキルチェンジしたい! という読者のために、Tomcatの最新バージョンを使いながらJSPを基礎から解説していく(編集部)

[吉川和巳,有限会社スティルハウス]

 前回までは、JSPにおける主な標準アクションの使い方を紹介してきました。本連載の最終回となる今回は、JSPページやJavaBeansコンポーネントなどを1つのWebアプリケーションとしてまとめ、Tomcatに配置する方法を説明します。

Webアプリケーションはどこに配置するべきか?

 本連載ではこれまで、JSPページやJavaBeansコンポーネントの記述方法を説明してきました。しかし、こうして作成したJSPファイルやクラス・ファイルなどの成果物をTomcat上で動作させるには、どのような手順を踏めばよいのでしょうか。

初期は特に決まっていなかった

 実はJava EEの初期には、この手順が標準化されておらず、TomcatなどのWebコンテナ製品ごとに異なるディレクトリ構成に合わせて各ファイルを配置したり、独自形式の設定ファイルを記述する必要がありました。つまり、Webアプリケーションのポータビリティがあまり高くなかったのです。

 そこでその後Java EEでは、ポータビリティを高めるべく、Webアプリケーションのディレクトリ構成や設定ファイル書式が標準化されました。

サーブレット仕様での「Webアプリケーション」構成要素

 例えば、サーブレット仕様では、Java EEにおける「Webアプリケーション」を構成する要素を以下のように定めています。

  • JSPページやサーブレット
  • JSPページやサーブレットが利用するクラス・ファイルやクラス・ライブラリ
  • 静的コンテンツ(HTMLファイル、画像ファイルなど)
  • 設定ファイル(web.xml)

 これらの構成要素を、以下のディレクトリ構成で配置します。

ディレクトリ 内容
/ JSPファイル
静的コンテンツ
/WEB-INF クラス・ファイル、JARファイル、web.xmlなど
表1 Webアプリケーションのディレクトリ構成

 ここで「/」とは、Webアプリケーションのルート・ディレクトリを表します。JSPファイルやHTMLファイル、画像ファイルなどは、同ディレクトリに配置します。では、Tomcatにおける実例を見てみましょう。Tomcatでは、Webアプリケーションのディレクトリを「/webapps」ディレクトリに格納します。

JSPサンプル・コードのディレクトリ構成

 例えば、Tomcatに標準で付属するJSPサンプル・コードは、同ディレクトリ以下に「jsp-examples」という名称で収められています。このjsp-examplesディレクトリが、Webアプリケーションのルート・ディレクトリとなります。

図1 Webアプリケーション「jsp-examples」の構成例 図1 Webアプリケーション「jsp-examples」の構成例

 デフォルトでは、Webアプリケーションのルート・ディレクトリ名がそのままURLのパスに割り当てられます。

 例えば、図1のWebアプリケーションjsp-examplesは、

http://<ホスト名>/jsp-examples/……

 といったURLでアクセス可能になります。

 また、図1の例のように、JSPファイルや静的コンテンツは、ルート・ディレクトリ以下に任意のサブ・ディレクトリに配置することも可能です。このサブ・ディレクトリ名はそのままURLのパスに反映されますので、例えば「/jsp-examples/cal/cal1.jsp」というJSPファイルは、以下のURLでアクセスできます。

http://<ホスト名>/jsp-examples/cal/cal1.jsp

 ただし、サブ・ディレクトリの中でも次に説明する「WEB-INF」だけは特殊なディレクトリであり、Webブラウザからアクセスできません。

WEB-INFディレクトリの中身を探る

 Webアプリケーションのルート・ディレクトリには、WEB-INFという名称のサブ・ディレクトリを作成します。ここには、サーブレットやJavaBeansのクラス・ファイル、クラス・ライブラリのJARファイルなどを格納します。

 WEB-INFディレクトリは、以下のように構成します。

ディレクトリ 内容
/WEB-INF web.xml
/WEB-INF/classes クラス・ファイル
/WEB-INF/lib JARファイル
表2 WEB-INFディレクトリの構成

 WEB-INFディレクトリの直下には、設定ファイルであるweb.xmlを配置します(同ファイルについて詳しくは後述します)。また、サブ・ディレクトリとしてclasseslibを必要に応じて作成できます。classesディレクトリにはクラス・ファイル、libディレクトリにはJARファイルをそれぞれ配置できます。

 例えば、Webアプリケーションを構成するサーブレット・クラスをはじめサーブレットやJSPから利用するJavaBeansクラス、各種クラス・ライブラリなどを、これらのディレクトリに配置できます。

クラスパスに自動的に追加

 classesディレクトリとlibディレクトリに配置されたクラスは、いずれもクラスパスに自動的に追加されます。つまり、Java EEでは、Webアプリケーションの実行に際して、複雑なクラスパス設定の手間が掛からない仕組みになっています(ただし、クラス・ファイルをコンパイルする際には、javacコンパイラに対するクラスパス設定が必要です)。

 ちなみに、これら両ディレクトリは利用したいクラスのファイル形式によって使い分けます。個別のクラス・ファイルならばclassesJARファイルならばlibを利用します。いずれか一方のみ用いても、また両方用いても構いません。

図1 Webアプリケーション「jsp-examples」の構成例 図2 /WEB-INF/libの構成例
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。