JSPはサーブレット?


今までJSPを使ったWebアプリケーションの基本について説明してきましたが、皆さんの中には「サーバーサイドJavaでは、JSPというスクリプト言語があるんだ」というように理解をされている方もいるのではないでしょうか。「Javaと全く同じ文法で、簡単に記述できるJSPという新しい言語が追加されたんだ」というように。

それは、実は全く違います。JSPという言語など、ないのです。もし、そのように勘違いされていたとしたら、ここで認識を改める必要があります。JSPは、HTMLの中にタグを使ってJavaのプログラムを埋め込み記述することができます。が、実はこれは、「こうして書いたスクリプトそのものが実際に動いているわけではない」のです。どういうことか? つまり、「スクリプトをJavaのソースコードに翻訳している」のです。JSPスクリプトの読み込みから実行までの流れを整理すると、こんな感じになります。

JSPのスクリプトが実際に実行されるまでの流れ。


要するに、JSPとは「JSPファイルをもとにJavaのクラスファイルを自動生成し実行する仕組み」だったのです。最終的に実行されるのはあくまでJavaのプログラムだったんですね。

では、この「最終的に生成されるJavaプログラム」というのは、一体どのようなものなのか。――それが、今回取り上げる「サーブレット」と呼ばれるものなのです。

サーブレットは、サーバで実行される小さなプログラムです。皆さんは、「アプレット」というのは既にご存知でしょう。Webブラウザの中で動く小さなプログラムですね。サーブレットは、そのサーバー版というようなものをイメージするとよいでしょう。

今までTomcatなどのJavaサーバーを使ってきましたが、これらは正確には「サーブレット・コンテナ」と呼ばれます。要するに、中でサーブレットを組み込んで動かすためのコンテナなのですね。このサーブレット・コンテナには、クライアント(Webブラウザなど)からさまざまな要求を受け取ったりすると、それを処理し、必要に応じてサーブレットのインスタンスを作成し、その中のメソッドを呼び出すような仕組みがあらかじめ組み込まれています。

したがって、サーブレット・コンテナで呼び出されるプログラムのルールに従ってプログラムを作成し(これがサーブレット)、それをサーブレット・コンテナに配置しておけば、あとは何も面倒なことを考えなくても、必要に応じてサーブレット・コンテナがサーブレットを呼び出し実行してくれる、というわけです。

サーブレットに必要なもの


では、実際にサーブレットを利用するには、どのようなものを準備する必要があるのでしょうか。これは、2つのファイルを用意する必要があります。それは以下のようなものです。

●サーブレットのクラスファイル。これは当然ですね。
●web.xmlファイル。これは、サーブレット・コンテナにサーブレットを認識させるために必要です。

1つ目のサーブレットのクラスについてはなんとなくわかるでしょう。サーブレットもJavaのクラスですから、クラスとして用意します。サーバサイドJavaでは、サーブレット・コンテナでサーブレットとして実行されるクラスの仕様がきちんと決まっており、そのためのクラスやインターフェイスの類も揃っています。ですから、あらかじめ決められている形でクラスを作成すれば、サーブレットのクラスを作ることはそう難しくありません。

もう1つのweb.xmlについては注意が必要です。これは、「Webアプリケーションに関するさまざまな設定情報を記述してあるファイル」です。サーブレットのクラスを作ったからといって、サーブレット・コンテナが自動的にそれを認識してくれるわけではありません。何しろサーブレットは、ただのJavaのクラスですから。「このクラスがサーブレットかそうでないか」なんて、見ただけじゃわからないでしょう?

それにWebというのはhttp://○○~というようにブラウザなどからURLにアクセスをして動くものですから、「このサーブレットはどのURLに対応させればいいか」ということも指定してやらないといけません。そうした「サーブレットを公開するために必要な情報」を、あらかじめ指定した形でweb.xmlに記述しておく必要があるのです。

サーブレット・コンテナは、Webアプリケーションをロードする際、そこにあるweb.xmlを読み込みます。そして「このWebアプリケーションにはこういうサーブレットのクラスがあって、それらはこのURLにアクセスされたときに実行するんだな」ということを知るわけです。ですから、このweb.xmlの記述は非常に重要なのです。