サーブレットはサーバサイドシステムの一種です。 サーバサイドシステムは一言で言えば、クライアントからの要求(request)をサーバのプログラムで処理して、その結果を応答(response)として返すシステムです。 クライアント側にはインターネットエクスプローラ(IE)やネットスケープなどの Web ブラウザが使われます。 サーバ側のシステムにはサーブレットの他もいくつかの種類があります。 ここではサーブレットの理解を深めていただくために、主なサーバサイドシステムを紹介します。
CGI(Common Gateway Interface)
CGI は最も古くから実用化され今でも使われているサーバサイドシステムです。 CGI はもともとサーバと外部アプリとの対話のために作られた仕組みで、特に言語には制約がありません。 CGI は独立なプロセスとして動作するので、プログラムがクラッシュしてもサーバには影響を与えません。
CGI はサービス要求を受けるたびに生成されるので応答を返すまでに時間がかかります。 同時アクセスがあるとその数だけプロセスを生成するのでメモリが多く必要です。 言語としては、Perl がよく使われますが、Perl はインタープリタなので、実行前に翻訳が必要となり、さらに応答に時間がかかることになります。
ASP.NET(ASP dot NET)
マイクロソフト社は CGI の性能問題を解決すべく、同社が提供する Web サーバである IIS(Internet Information Server)に ISAPI(Internet Server Application Program Interface)という機能拡張を導入しました。 ISAPI はサーバと同じプロセス内で実行されるので高速です。 しかし、ISAPI がクラッシュするとサーバ全体がダウンしてしまうことがありました。 そこで、ISAPI に代わる方法として ASP(Active Server Pages)を開発しました。 最近ではさらに機能を拡大した ASP.NET が提供され広く普及しています。
JSP/サーブレット
Java 技術を利用した本格的なサーバサイドシステムです。 当初は Java 言語そのものに近いサーブレットだけでしたが、後に画面処理が得意な JSP(Java Server Pages)が提供され、特に中〜大規模システムではこれらを組み合わせて使うことが多くなっています。 ASP のように OS が Windows 限定ではないので、信頼度の高い UNIX でのシステム構築が可能です。
MVC は もともと Smalltalkというオブジェクト指向言語でのGUI設計に用いられた概念で、最近ではJ2EEなど、エンタープライズシステムの開発などに応用されています。 ここで言う MVCモデルとは、ソフトウェアの設計モデルの一つで、処理のビジネスロジックを担当する「Model」、表示・入出力を担当する「View」、入力を受け取ってその内容に応じてViewとModelを制御する「Controller」の頭文字を取ったものになります。
Model(JavaBeans/EJB)
モデルは、システムの中で処理の中核を担うビジネスロジックを担当するシステムの本体部分にあたります。 モデルは入出力や表示といった処理は行わず、業務モデルの実装といった部分を担当することになります。 J2EEでは JavaBeans、EJBがモデルを担当します。
View(JSP)
ビューは、表示、入出力といった部分を担当します。J2EEでこの部分はServletやJSPで実装します。一般的な HTML表示に関してはJSP、そのほかの特殊なデータ(バイナリデータ)を出力する場合は Servletを用いるのが標準的な使い方です。
Controller(Servlet)
コントローラは、ViewとModelを制御します。 自分自身では表示を行ったりロジックの実行は行わず、Viewからの入力に応じて、必要なロジックの実行を Modelに依頼し、その結果表示をViewに依頼します。 J2EEでは Servletで Controllerを実装します。
このように、明確に機能ごとに分離することで、開発作業の分業が容易になり、また、互いに仕様変更の影響を受けにくくなります。
EJBとは
Enterprise JavaBeansという名称が示すとおり、エンタープライズ向けのコンポーネントを提供するための 仕組みです。 EJBは強力なコンポーネントモデルである。 コンポーネントモデルとは、ソフトウェアを再利用可能な部品として作成し、それを「コンテナ」と呼ばれる 入れ物に組み込んでシステムを構築できるのが特徴です。 EJBにはデーターベースへの接続、トランザクション処理、リモートアクセスなどの機能がすでに実装されて いるので、開発者はビジネスロジックのみに集中することができ、開発効率を向上することができます。
MVCモデルで設計することで機能ごとの分離を明確にすることができ、それぞれの独立性が確保出来るようになります。 開発では、分業がしやすくなり、各機能の専門家は自分の得意分野の実装に集中することが可能となります。
また、コンポーネント間の依存性が最小限に抑えられるため、ほかの部分の変更による影響を 受けにくい実装にすることができ、コンポーネントの再利用性が高まります。また、ほかのコンポーネントの変更が原因で、複数の担当者が同一のソースに対してメンテナンスを行う、というような事態を避けることもでき、保守性も確保されるようなメリットがあります。