1.サーブレット

サーバーサイドで稼働するサーブレットプログラムについて説明します。

(1) CGI について

 CGI を使ったシステムはどんなものか、簡単に説明しておきます。CGI とはCommon Gateway Interface といい、インターネット技術を使ったシステムでブラウザから送信されたデータをWEBサーバで受け、このデータを処理するアプリケーションへ渡すための仕組みのことです。

 CGI の仕組みを使ってデータ処理をするアプリケーションのことを一般に CGI プログラム( CGI アプリケーション)といいます。


 CGI プログラムでよく見かけるものはアンケートや掲示板です。これらのプログラムはブラウザ上のフォームにユーザが記入をし、送信ボタンを押すとデータがWEBサーバに転送、CGI プログラムによって処理され、処理結果がブラウザに戻ってきます。

 このときデータを転送する方法は2種類あります。HTML タグの METHOD 属性として指定するものです。データ転送の種類はGETと POST です。この2種類の特徴は上の図に示すとおりです。GET 要求で処理した場合は、ブラウザのアドレスバーに転送したデータが表示されてしまう(たとえば検索エンジンを利用するときなど)ため、パスワードを送信するようなプログラムではPOST要求にするなどの注意が必要です。


CGI プログラムを作るのに必要となる HTML の知識については、そのつど説明します。


(2) サーブレットとは

 サーブレットとは CGI を使ったシステムのようなインターネット技術を利用した多階層アプリケーションにおける、サーバサイド Java プログラムのことです。Java プログラムにはアプレットとアプリケーションの2種類の作成のしかたがありましたが、サーブレットはこのうちアプリケーションのタイプに属します。したがって、アプレットのようなセキュリティに関する制限はありません。

 下の図はサーブレットを使ったシステムの簡単な例です。サーブレットプログラムを動かすにはサーブレットエンジン(またはサーブレットコンテナといいます)が必要です。サーブレットエンジンはWEBサーバに組み込まれているものや、あとからアドインの形で導入するものもあります。サーブレットの実行環境は大手メーカーの有償のや、JavaWebServer や Tomcat のように無償あるいは体験版のものなどがあります。


この後の章では Tomcat を利用してサーブレットプログラムを作成していきます。


(3) CGI とサーブレットの違い

 それでは CGI とサーブレットは何が違うのでしょうか? CGI プログラムの場合、ブラウザ側の処理要求があると、各要求に応じてそれを処理するためのプロセスが1つ作成されます。プロセスを作成するという処理は非常に重いもので、たくさんのリクエストがある場合は処理効率が悪くなります。



 これに対してサーブレットの場合は、処理をするサーブレットは1つだけです。ブラウザから処理要求があると、その処理をするサーブレットのインスタンスが存在しない場合(はじめて接続する場合)だけインスタンスを生成します。そして、あらかじめスレッドプールに用意されているスレッドをサーブレットに割り当てて処理を行います。2回目の接続以降はすでにインスタンスが存在するので、この処理は先に生成されたサーブレットのインスタンスを利用して処理が行われます。

 このように、サーブレットはプロセスは生成せず、1つのインスタンスを使ってスレッドで実行されるため比較的高速な実行が可能で、負荷も CGI より低くなります。ただし、サーブレットは複数のスレッドで共有されるため、スレッドセーフなプログラムにする必要があります。

拡張 CGI などでは、上に述べた問題点を解決しているものもあります。


次の章(2.Tomcat の導入)