あらためて、サーブレットとJSPの比較など

5月 23, 2010

あらためて、サーブレットとJSPの比較など。
これらの違いや役割などはいろんなところで書かれているが、自分なりにまとめて
みないと頭に落とし込めないので。

まず、サーブレットの役割をごく簡単に言うと、

クライアントの要求に対してデータベースやテキストファイルの検索や更新と
いった処理をサーバサイドで行い、その処理結果をHTMLとして返す。


・・・といったところになる。
これだけだとCGIと同じということになるが、サーブレットはマルチスレッドモデルを
採用することで処理効率を大幅に上げた。サーブレットは一度サーバーでロードされると、
プログラムがスレッドとして起動する。
CGIのようにリクエストのたびにプロセスを起動する必要がないため動作が高速となる。
(CGIはプロセスモデル、サーブレットはマルチスレッドモデルの形態である)

また、基本的なWebアプリケーションの動作をサーブレットエンジン
(サーブレットを動作させるために拡張するモジュール)が行ってくれるため、
開発効率が良いという利点がある。
例えばサーブレットでセッション管理を実装するには、HTTPSessionクラスという機能が
あらかじめサーブレットエンジンに備わっているため、これを利用すればいいだけである。
プログラマは余計なことを気にせずやりたいことだけをコーディングすればいい、
ということになる。
(これがCGIだと、セッション管理をプログラムで実装しなければいけない)

が、ここで問題になるのが、サーブレットはJavaのソースコードに直接HTMLのタグを
組み込むため、開発効率が悪いこと。ざっと挙げても以下のような問題点がある。

・画面のレイアウトを確認しながらの開発ができない
・HTML処理がソースコードに組み込まれているため、
 簡単なHTMLの修正も容易にできなくなる
・本来デザイナーの仕事である画面デザインの役割をプログラマが担うことになる

これを解決するために編み出された技術がJSP(Java Server Pages)である。
JSPは平たく言えば、画面表示に関わる要素をJava(サーブレット)のソースコード
に書かずに済むように生まれた技術と言える。

サーブレットがプログラムにHTMLの処理を記述していたのに対して、JSPでは
HTMLと同じ構造を持つ「.jsp」ファイルに埋め込まれた断片的なJavaコードが
動的に処理される仕組みとなっている。「.jsp」ファイルはコンテンツと同じ
ディレクトリに置かれ、<%~%>で囲まれた「JSPタグ」と呼ばれる部分に要素と
なるJavaコードを記述する。
JSPにおいては、HTMLの中のJSPプログラムが呼ばれるとサーブレットが動的に
作成され、サーバ上で実行される。

コンパイルの必要の有無
JSPはコンパイルを必要としないが、サーブレットの場合は常にコンパイルが必要である。
サーブレットではソースが書かれた「.java」ファイルをjavacコマンドでコンパイルし、
「.class」ファイルを生成。サーバ上にはコンパイル後の「.class」ファイルを
配置しなければならない。

これに対してJSPは、「.jsp」ファイルをそのままWebサーバに配置すれば動作する。
サーブレットエンジンが.jspファイルを自動的にサーブレットに変換し、コンパイル
したうえで実行まで行ってくれるのである。

とはいえ、JSPはサーブレットの後継技術というわけではなく、
あくまで選択肢が増えたものと認識したほうがいいようである。
一般的にはJSPの方がコードがシンプルで済み、Javaの知識があまりないデザイナーに
View(画面)部分を担当してもらう方が開発効率が上がる、と言われている。
しかしJSPにJavaコードを記述、サーブレットにHTMLを記述、どちらにしても
処理内容が増えればコードが複雑になり読みづらくなる。

結論から言うと、サーブレットとJSPが実現できることは同等である。
アプリケーションの規模やニーズに応じて使い分けるために2つの選択肢がある、
と捉えればよいと思う。

関連記事
TomcatとJBossの違い

参考・出典
サーブレット/JSPの役割を理解する
書籍「Javaでなぜつくるのか」米持幸寿著 日経BP社

Posted by Le Blue | Categories: Tomcat |

No Responses so far | Have Your Say!

Comments are closed.