Javaを途中までかじったが挫折した。やはりJavaプログラマにスキルチェンジしたい! という読者のために、Tomcatの最新バージョンを使いながらJSPを基礎から解説していく(編集部)
前回までは、JSPにおける主な標準アクションの使い方を紹介してきました。本連載の最終回となる今回は、JSPページやJavaBeansコンポーネントなどを1つのWebアプリケーションとしてまとめ、Tomcatに配置する方法を説明します。
本連載ではこれまで、JSPページやJavaBeansコンポーネントの記述方法を説明してきました。しかし、こうして作成したJSPファイルやクラス・ファイルなどの成果物をTomcat上で動作させるには、どのような手順を踏めばよいのでしょうか。
実はJava EEの初期には、この手順が標準化されておらず、TomcatなどのWebコンテナ製品ごとに異なるディレクトリ構成に合わせて各ファイルを配置したり、独自形式の設定ファイルを記述する必要がありました。つまり、Webアプリケーションのポータビリティがあまり高くなかったのです。
そこでその後Java EEでは、ポータビリティを高めるべく、Webアプリケーションのディレクトリ構成や設定ファイル書式が標準化されました。
例えば、サーブレット仕様では、Java EEにおける「Webアプリケーション」を構成する要素を以下のように定めています。
これらの構成要素を、以下のディレクトリ構成で配置します。
ディレクトリ | 内容 |
---|---|
/ | JSPファイル 静的コンテンツ |
/WEB-INF | クラス・ファイル、JARファイル、web.xmlなど |
表1 Webアプリケーションのディレクトリ構成 |
ここで「/」とは、Webアプリケーションのルート・ディレクトリを表します。JSPファイルやHTMLファイル、画像ファイルなどは、同ディレクトリに配置します。では、Tomcatにおける実例を見てみましょう。Tomcatでは、Webアプリケーションのディレクトリを「/webapps」ディレクトリに格納します。
例えば、Tomcatに標準で付属するJSPサンプル・コードは、同ディレクトリ以下に「jsp-examples」という名称で収められています。このjsp-examplesディレクトリが、Webアプリケーションのルート・ディレクトリとなります。
デフォルトでは、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アプリケーションのルート・ディレクトリには、WEB-INFという名称のサブ・ディレクトリを作成します。ここには、サーブレットやJavaBeansのクラス・ファイル、クラス・ライブラリのJARファイルなどを格納します。
WEB-INFディレクトリは、以下のように構成します。
ディレクトリ | 内容 |
---|---|
/WEB-INF | web.xml |
/WEB-INF/classes | クラス・ファイル |
/WEB-INF/lib | JARファイル |
表2 WEB-INFディレクトリの構成 |
WEB-INFディレクトリの直下には、設定ファイルであるweb.xmlを配置します(同ファイルについて詳しくは後述します)。また、サブ・ディレクトリとしてclassesとlibを必要に応じて作成できます。classesディレクトリにはクラス・ファイル、libディレクトリにはJARファイルをそれぞれ配置できます。
例えば、Webアプリケーションを構成するサーブレット・クラスをはじめサーブレットやJSPから利用するJavaBeansクラス、各種クラス・ライブラリなどを、これらのディレクトリに配置できます。
classesディレクトリとlibディレクトリに配置されたクラスは、いずれもクラスパスに自動的に追加されます。つまり、Java EEでは、Webアプリケーションの実行に際して、複雑なクラスパス設定の手間が掛からない仕組みになっています(ただし、クラス・ファイルをコンパイルする際には、javacコンパイラに対するクラスパス設定が必要です)。
ちなみに、これら両ディレクトリは利用したいクラスのファイル形式によって使い分けます。個別のクラス・ファイルならばclasses、JARファイルならばlibを利用します。いずれか一方のみ用いても、また両方用いても構いません。
Copyright © ITmedia, Inc. All Rights Reserved.