Java Webアプリケーション

Last modified: Apr./26th/2008; Since: June/1st/2002

Javaアプリケーションは、クライアント/サーバー環境(分散環境)のサーバ側で実行することができます。CGIと同じです。現在の Java は、サーバサイドのWebアプリケーションでの利用が主流です。ブラウザからインターネット経由でサーバ・マシンにアクセスすることで、 サーバ・マシン上でJavaアプリケーションが実行され、ブラウザはその出力結果を受け取ります。

Webアプリケーション

Webアプリケーションは、Web上のサーバにおいて実行されるアプリケーションであり、実行するサーバはアプリケーション・サーバと呼ばれます。Java はネットワーク環境との親和性が高く、Webアプリケーションといえば、サーバ・サイドで実行されるJavaアプリケーションのことだといってよい状況にあります。Microsoft .NetやPerl, Pythonなども使われていますが、企業の業務開発ではJavaが多いといってよいでしょう。

Webアプリケーション実行基盤
図:Webアプリケーション実行基盤

本稿では、Java のサーバサイドで実行される規格である、サーブレット、JSP (Java ServerPages) について解説します。

静的なWebから動的なWebへ

WWWは、インターネット上のサーバに置いた文書をクライアントから要求して閲覧するサービスの名称です。通信にはHTTP (HyperText Transfer Protocol)と呼ばれる規約(プロトコル)を用い、文書を公開するサーバはHTTPサーバ(もしくは、Webサーバ)と呼ばれます。HTTPサーバは、クライアントからURL要求を受け取ると、対応する文書を返します。クライアントは、URLをHTTPサーバに送信して、返された文書をダウンロードして自分のPCに一時的に保管し、それをブラウザで閲覧します。

このような単純な仕組みからなるウェッブの世界は、動きのない予め決まった文書だけからなる静的なものです。これに動きを付けるには、JavaScriptのようなプログラミング言語やFlashのようなリッチなメディアを文書と一緒にダウンロードしてクライアント側で実行するか、Perlなどで書かれたプログラムをサーバ側で実行し、その処理結果を返すかの何れかの方法がとられます。

クライアント側で実行が必要になる場合、クライアント側に当該言語の実行環境が備わっていないとなにもできません。また、データを永続化させてサービスを提供することも困難です。一方、サーバ側で実行する場合、サーバ側に当該言語の実行環境を備えておけば、全てのクライアントにサービスを提供できます。この点で、Perl をはじめとする言語により、CGI (Common Gateway Interface) と呼ばれる仕組みが広く使われてきました。

CGIの限界

CGIは、HTTPサーバのモジュールとして用意され、要求を受け取ったHTTPサーバは、当該サービス用のプロセスを立ち上げて処理し、処理結果をクライアントに返します。一つの処理ごとに、プロセスの立ち上げ/終了が必要になります。プロセスというのは、メモリ上を占有し、コンピュータ制御の実行経路をロードする一つの単位です。一般に、複数のプロセスによってCPUは競合状態にあり、OSがそれらの実行可能状態にあるプロセスに対して適宜CPUの実行を割り当て(ディスパッチ)ます。

プロセスの開始と停止は、メモリ領域へのロードと占有された領域の解放、OSへの登録、ディスパッチなどのオーバーヘッドが必要となり、コンピュータにとっては実行時コスト(負荷)の高い処理です。そのため、CGIの場合は、クライアント要求の増大によるシステム資源の圧迫は深刻であり、処理速度、安定性、拡張性などの点で、大規模システムには不適切です。

サーバサイド・スクリプティング

CGIの問題を解決しようとして登場したのが、サーバサイド・スクリプティングです。これは、個々の要求を、サーバ上に常駐するプロセス内のスレッドとして実行するものです。これから説明するServlet/JSPはJavaによるサーバサイド・スクリプティングの実装技術です。他にPHPやMicrosoft.NETなどがありますが、大型案件の多くはJavaです。

Servlet/JSP/bean

サーバーにインストールし、サーバ上で実行されるJavaアプリケーションをサーブレット (Servlet) と呼びます。クライアントがHTTPサーバに要求を送ると、アプリケーション・サーバに渡されて、サーブレットが実行され、結果がクライアントに返されます。アプリケーション・サーバは、いったんサーバ上で起動すると、メモリ上に常駐し続け、クライアント要求ごとにスレッドを開いて処理します。

サーブレットはJavaの構文どおりに記述するために、HTMLなどの応答を出力するには、いちいちprintメソッドを記述する必要があります。これは面倒でバギーな作業です。 HTMLなどの文書の記述を容易にするために登場したのがJSP (JavaServer Pages)です。 JSPも実行時には、アプリケーション・サーバによってjavaへ変換され、コンパイル/実行されることになります。

サーブレットやJSPによって利用されるオブジェクトはJavaBeansと呼ばれる規約に従って開発することが多くなります。JavaBeans仕様は、もともとSwingなどのGUIアプリで、再利用性を高めるための共通規格という意味合いで登場したものです。通常のJavaクラスと同じ構文なのですが、JavaBeans仕様に従ったモジュールを特に、Java Bean, beanと呼びます。Webアプリケーションにおけるこれらのオブジェクトの役割は、ビジネス・ロジックの実装、DBへの連携を専らとします。

一般に、実行ロジックはbeanに記述し、その表示をJSPで行い、クライアント要求をサーブレットが制御します。これをモデル2アーキテクチャと呼びます。モデル2アーキテクチャは、Model/View/Control (MVC) というデザインパターンに則っており、それぞれにbean/JSP/Servletが対応します。

アプリケーション・サーバとはなんだろうか

WWWでは、ネットワーク構成のプロトコルはTCP/IPを用い、文書交換のプロトコルにHTTPを使っている。クライアントはインターネット上のホストとTCP/IPを用いて接続/通信し、要求/応答をHTTPでやり取りしています。このとき、クライアントからの要求を処理するホストをWWWサーバ、またはHTTPサーバと呼び、ホストで稼動するdaemonとして実装されます。

WWWでは、クライアントがインターネット越しのホストにHTTP要求を送り、ホストで稼動しているhttp daemonが応答します。たとえば、URL要求に対して、対応するWebページを返します。

CGIでは、HTTP要求に対応するリソースがPerlなどの実行可能なものであれば、http daemonは、対応する処理環境に制御を渡し、その実行結果をクライアントに返します。

Serlet/JSP/beanの場合は、Javaを実行可能なバーチャル・マシーン (JVM) が必要です。これを、アプリケーション・サーバと呼びます。HTTPサーバは、アプリケーション・サーバに制御を渡します。

HTTPサーバは、現在はApacheが主流であり、ベンダー各社もApacheベースでHTTPサーバ製品を開発しています(IBM HTTP Server (IHS)など)。MicrosoftのIISもかなり多くの割合を占めます。

実装製品

Webアプリケーションを実行できる製品は、複数のコンポネントに分けられます。主なコンポネントは次の通りです:

例として次の製品を挙げます:

プレゼンテーション層のServlet/JSPコンテナ(Webコンテナ)を、Webアプリケーション・サーバと呼び、EJBなどを実行できるサーバ(EJBコンテナ)をJ2EEサーバ/Java EEサーバと呼ぶことがあります。当サイトでは、何れの製品も、アプリケーション・サーバと呼称します。



Copyright © 2002-2008 SUGAI, Manabu. All Rights Reserved.
SEO [PR] !uO z[y[WJ Cu