サーブレットの基礎知識

サーブレットのメリットとデメリットはどんなところですか?

テンアートニ 中越智哉
2000/12/20

 サーブレット(以下Servlet)と同様な動作を行うものとしては、Servletよりも以前から、CGIというものがあり、Servlet登場前は、動的なWebページの生成は、ほとんどCGIを利用して行われていました。

 Servletを一般のCGIと比較した場合、次のようなメリットがあります。

(1)メモリ上に常駐するので、実行するごとに新しいプロセスを生成しなくて済む
 一度実行されたServletは、1つのスレッドとして実行環境のメモリ上に常駐しますので、2回目以降の実行においては、新たなプロセスを生成せずに、すでにあるものを実行できるため、応答速度に優れています。特に、初期化処理や終了処理において、負荷の高い処理を行っている場合、毎回プロセスを生成して初期化、終了処理を行うのと、初期化済みのスレッドでメインの処理だけを実行するのとでは応答速度に大きな差が出てきます。

(2)マルチスレッドで動作することができる
 複数のクライアントから同時にリクエストがあっても、片方を待たせることなく並行して処理を行うことができるため、やはり応答速度に優れています(ただし、複数スレッドから同じメソッドを同時に実行しても問題ないように考慮する必要があります。もし、複数スレッドでの同時実行をしたくない場合にはそのようにServletを定義することもできます)。

(3)Javaのメリットをそのまま享受することができる
 CGIはネイティブコードを含んだバイナリであることが考えられるため、プラットフォーム依存になり、ポータビリティが損なわれる可能性がありますが、ServletはJavaで書かれていますから、Javaの特徴であるプラットフォーム非依存性によって、十分なポータビリティが確保できます。また、それ以外にもJavaのメリットとなる点についてはServletでもほとんど適用できます。

 上記の点は、Servletが主に利用されるWebアプリケーションの特徴を考えた場合、非常に有用なものとなります。(1)、(2)の点について考えた場合、もしもクライアントとサーバが1対1でやりとりをしているだけであれば、あまり差がないことであっても、Webアプリケーションの場合には、1つのサーバに対して不特定多数のクライアントが同時にアクセスしてサービスを受けるため、これらの特徴はサービスの応答速度の向上(=顧客の快適さ)に大きく影響します。インターネット上のサイトでのサービスのような公開系のWebアプリケーションにおいては、それは顕著なものとなります。

 また、(3)の点については、Javaでコーディングできることから、ほかの言語と比較して開発生産性が高く、サイクルの早いWebアプリケーションの構築に柔軟に対応できるといえます。

 デメリットというものをもし考えるとすれば、以下のようなものが挙げられるでしょう。

(1) Javaの実行速度の遅さ
 Javaはインタプリタ言語であることから、ネイティブなバイナリコードと比較するとプログラム単体での実行速度の点で不利なことは事実です。しかし、上記のメリット(1)、(2)を考えても、Webアプリケーションにおける応答速度ではCGIなどよりも優位といえます。もし、さらに速い応答速度が要求されるのであれば、相応のスペックのマシンへの移行を検討することになります。この際に、CGIなどでネイティブな実装をしている場合は、移行できるプラットフォームが制限されてしまいますが、Servletであれば、上記のメリット(3)にもあるように、プラットフォームが変わったとしても、Javaの動作する環境であれば、すでにあるServletには変更を行うことなく容易に移行することができます。

(2)Servletに対応したインターネット・サービス・プロバイダ(ISP)がほとんどない
 CGI(Perlなど)に対応したISPは多いですが、Servletに対応しているISPは国内にはほとんどないのが現状です。そのためAppletと違い、個人レベルで作成したServletをISPにある自分のホームページで気軽に公開する、ということは残念ながらできません。もちろん、業務での使用においては、自前のサーバを構築することがほとんどでしょうから、この点は問題にならないでしょう。

(3)Java技術者そのものの不足
 これは、Servlet自体のデメリットというわけではありませんが、Javaという言語が登場してからまだ5年程度しかたっていないという新しい言語であることから、まだまだJava技術者そのものが不足しているという問題があります。

 今後利用されるようになってくるであろうJ2EEでも、Webブラウザとの通信にはServletが用いられており、Webアプリケーションにおいては、もはやServletを使うことは「常識」となりつつあります。

[関連記事]
WebアプリケーションにおけるサーバサイドJavaの役割 (@IT Java Solution)
サーブレットとJSPの連携 (@IT Java Solution)
サーブレットとEJBの連携 (@IT Java Solution)

「Java Solution FAQ」



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間