第1回:Javaの基礎はキーワードを知ることから始まる -1-2-3-4
JSPとサーブレットとの違い

表1に示したように、WebアプリケーションはJSPかサーブレットのいずれかを用いて開発する。JSPとサーブレットには次のような違いがある。

1. JSP
JSPは、HTMLテキストのような形で開発する。HTML中に、「」、その他特殊なタグを記述すると、そのタグ間がJavaプログラムとして解釈され実行される仕組みだ。

簡単にいえば「HTMLソース中にJavaのプログラムを埋め込む」開発スタイルとなる。

2. サーブレット
サーブレットは、JSPとは異なりJavaのプログラム言語だけを記述する。プログラム実行にはあらかじめ実行できる形式にコンパイルしておく必要があり、クライアントへの入出力は、専用のAPIを用いた文字列として読み書きする。

クライアントからJSPで作成されたプログラムが呼び出されると、始めて呼び出された際にサーブレットに変換してコンパイルされる。そして、2回目以降の呼び出しではJSPのプログラムが更新されていなければ、すでにコンパイルされているプログラムをそのまま実行する仕組みだ(fig.2)。

fig.2■JSPの動的コンパイル

すなわちJSPは最終的にサーブレットとして実行されるため、JSPとサーブレットとの違いは、開発スタイルということになる。JSPの場合には、(HTMLにJavaのプログラムが埋め込まれた)テキストファイルとしてJSPコンテナに配置するが、サーブレットの場合にはあらかじめコンパイルしたファイルとしてサーブレットコンテナに配置する。

Webアプリケーションを開発する場合には、JSPを使ってもサーブレットを使っても、どちらでもよい。とはいえ、それぞれに次のようなメリット・デメリットがあるので、明確に使い分けることが重要である。

JSP
メリット
HTML中にJavaのプログラムを直接記述することができるので、習得が容易。またコンパイルの必要もなくテキストファイルを配置するだけでよい。あとから出力したいHTMLテキストを変更したい場合――たとえば、クライアントに返すWebページのレイアウトを変更したい場合など――にも、対応しやすい。

デメリット
Javaのプログラムは、HTML中の特殊なタグ内に記述することになるから、HTML部分とJavaのプログラム部分が混在したわかりにくいプログラムになってしまう。またJSPは動的にコンパイルされ、サーブレットに変換されてから実行されるため、初回の実行がやや遅い(ただしこの問題は、手動でサーブレットに変換しておくことで回避できる)。

サーブレット
メリット
Javaだけで構成されたファイルとして記述するため、プログラムが読みやすい。反面、クライアントへの出力はAPIを使って文字列として出力するため、分かりづらくなる傾向にある。 デメリット  コンパイルを必要とするため、修正が困難。たとえば、クライアントに返すHTMLを書き換えたい場合には、ソースファイルを修正し、そのあとコンパイルしてサーブレットコンテナに配置し直さなければならない。

一般には、JSPとサーブレットのそれぞれのメリットとデメリットを活かすよう、次の指針で組み合わせて使うことが多い。

1- JSPではユーザーインターフェイスを記述する

JSPでは、HTMLを主体として複雑で記述が長くなるJavaコードを直接書かない。複雑な処理は、サーブレットやJavaBeans、EJBを呼び出して処理をする。そのようにすれば、JSPのファイルがJavaコードだらけで分かりづらくなる問題点を解決することができる。後からHTMLソースの適所を変更することも容易だ。

2--サーブレットでは処理のみを記述する

実際の処理はサーブレットに注力し、サーブレットにはユーザーインターフェイスを記述しないものだ。ユーザーインターフェイスに関する部分はJSPに記述し、サーブレットからJSPに処理を委託する形式をとる。

近年はWebのビジュアル化が進んでおり、開発者とデザイナーが分業して1つのWebアプリケーションを構築することが多い。そのため、デザイナーがどれだけ柔軟にクライアントに返すHTMLテキストを編集できるかがカギとなる。

習得しやすく、また理解しやすいのはJSPであるが、すべてをJSPで処理するのは避けたほうがよいだろう。1つのファイルにHTMLソースとJavaコーディング部分を混ぜると、開発者とデザイナーとの分業がしにくくなる問題があるからだ。すべてをJSPで処理する場合には、デザイナーが、埋め込まれたJavaの複雑なコードを見て編集する必要があり、分かりづらいばかりか、誤ってJavaのコードを編集したり削除されてしまうという弊害もある。

後でユーザーインターフェイスを変更できるようにするためにも、インタフェース部分はJSP、それ以外の部分はサーブレットで実装するといった使い分けが一般的だ。