| @IT > Java Agile > ツールでトライ!初めてのWebアプリケーション(1) |
|
第1回 サーブレットアプリケーションを体験しよう
ボーランド 新井正広 2004/5/15
Webアプリケーションを作成するには、多くの前提知識が必要です。そのため、多くの方が「これらの事項をすべて熟知しないと開発がスタートできない」と感じ、結果として「JavaによるWebアプリケーションの開発は難しいな」というところで踏みとどまってしまう傾向があります。これは非常に残念なことです。そこで、この連載では、順序を逆転して、「開発作業を支援するツール」を最大限利用して、まず動作するものを作成していただきます。動作するものが作成できたら、これを自分なりにカスタマイズして、いろいろなことを試してみてください。そのうえで、「実際のアプリケーション開発の中で必要な知識が出てきたら、順次これらを吸収する」というように、少し気楽にJavaによるWebアプリケーション開発を体験していただきたいと思います。 本連載では「開発作業を支援するツール」として、Borland JBuilder Xトライアル版を利用します。製品をインストールするだけで、アプリケーションの開発に必要なすべてのコンポーネントが自動的にインストール/設定されます。そのため、追加で何らかの作業を行うことなく、Webアプリケーションを試すことができます。 Borland JBuilder Xトライアル版の入手はボーランドのWebサイトから申し込みが可能です。ここでトライアル版CD-ROMを申し込むと、無償でCD-ROMが郵送されてきますので、インストールガイドに従ってインストールしてください。 通常、JavaによるWebアプリケーションの開発をスタートするには、Javaに関する知識に加え、以下のような知識や環境のセットアップが必要です。参考までに読んでください。開発ツールを活用することによって、これら必要な作業の多くを自動化、あるいは効率的に進めることが可能になります。
実際に試してみる前にWebアプリケーションとは何かについて簡単に触れておきましょう。Webアプリケーションとは、Webブラウザからのリクエストによって動的なコンテンツを提供するアプリケーションを指します。クライアントにWebブラウザがインストールされていれば、ネットワークに接続されているあらゆるクライアントにアプリケーション機能を容易に提供できるため、爆発的に適用範囲が増えていることは皆さんもご承知のとおりです。 クライアントとなるブラウザは、Webサーバに対しリクエストを投げ、これに対しサーバが動的にコンテンツを生成し、クライアントにコンテンツを提供します。 Webブラウザに動的なWebページを提供する代表的な方法には、CGIなど古くから使われている技術に加え、ここで学習するサーバーサイドJavaと呼ばれる技術が存在します。ここでは、初めに古くから使われている技術であるCGIについて復習をしておきましょう。
Webサーバは、クライアントから要求されたURLのパターンから、これがCGIに対するものであることを認識すると、該当のCGIプロセスを起動し、リクエストの内容を環境変数や標準入力を通じて伝えます。CGIは、これらを解析し、必要なレスポンス(HTMLドキュメント)を組み立て、その内容を標準出力から提供します。つまり、コマンドラインアプリケーションと同じように動作すると考えることができます。このようにCGIは非常に単純な仕組みで構築されていますが、リクエストのたびに新たなプロセスを起動する必要があることから、あまり大規模なシステムでの利用には適さないといわれていました。 HTTPプロトコル WebブラウザとWebサーバの間の通信手順は、HTTP(Hyper Text Transfer Protocol・ハイパーテキスト転送プロトコル)として定義されています。HTTPプロトコルに基づいてサーバにリクエストを行う方法には、指定したURLに対するデータを要求するGETメソッド、データを添付してリクエストを行うPOSTメソッドなど、いくつかの命令パターンがあります。
CGIがWebサーバ上で動作するコマンドラインアプリケーションのように動作するのとは異なり、サーブレットはWebコンテナと呼ばれるJava対応のWebサーバ上で動作するJavaアプリケーションととらえることができます。 サーブレットを使用してアプリケーションを作成するときは、Java言語でクライアントからの要求に応じたHTMLを動的に生成するクラス(サーブレットクラス)を作成し、TomcatなどのWebコンテナに配備します。 HTMLを動的に生成するクラス(サーブレットクラス)は、一から作成するのではなく、その基本機能が実装されているjavax.http.HttpServletクラスを派生(拡張)して、オリジナルのコンテンツを生成するプログラムコードを記述します。 クライアントからのアクセスがあると、Webコンテナは、インストールされたサーブレットの中から、適切なサーブレットクラスのメソッドを呼び出し、レスポンスを受け取り、これをクライアントWebブラウザに返します。
HttpServletクラスとサーブレットのライフサイクル 一般にサーブレットを作成するときは、javax.http.HttpServletクラスを派生(拡張)して、オリジナルのコンテンツを生成するプログラムコードを記述します。そこで、派生(拡張)クラスの作成方法の前に、そのベースとなるクラスについて、確認しましょう。これらのWebコンテナの一部として提供されており、JBuilder X の場合では「<JBuilderX>/extras/jakarta-tomcat-4.0.6-src.zip」にソースコードが格納されています。 サーブレットは、図2にあるように、Webコンテナにロードされ、実行されるJavaクラスです。ここで、サーブレットがどのように呼び出されるのかを確認しましょう。サーブレットのライフサイクルを図示したものが図3です。
図3に示したようにサーブレットは以下の順序で動作します。
このように、サーブレットはWebコンテナに動作可能な状態として常に待機するので、クライアントからの呼び出しがあると即座に応答します。
それでは、実際にサーブレットを作成してみましょう。ここでは、多くのプログラミング解説の例にのっとり、入力された名前に返答するいわゆるHello Worldのサーブレット版を作成してみましょう。作成するアプリケーションを実行した様子を以下に示します。
このアプリケーションは、以下のような機能を持つものとします。
この要件を満たすアプリケーションを作成するには、以下の4つのファイルを作成する必要があります。
それでは、これらを順に作成しましょう。 ステップ1:JBuilderプロジェクトを作成する JBuilderはプロジェクトと呼ばれる単位で作業を進めます。「プロジェクト」ファイルには、使用するクラス、プロジェクトのビルド方法、実行方法などの設定が保存されます。JBuilderを起動し、[ファイル|新規プロジェクト]を選択すると、[プロジェクトウィザード]というウィンドウが表示されます。ここでは、構築するプロジェクトの名前や、格納するディレクトリを指定します。
作成するプロジェクトはMyServletProjと命名することにしましょう。ほかの項目は、すべてデフォルト設定のままで構いません。[終了]を選択して、プロジェクトファイルを作成します。 ステップ2:Webモジュールを作成する プロジェクトを作成したら、次にWebモジュールを定義します。Webモジュールとは、これから作成するWebアプリケーションに必要なモジュール(HTMLファイルやサーブレット、画像イメージなど)をZIP形式にまとめたようなファイルです(通常のJavaアプリケーションであればJAR・Java ARchive)。ここには、Webコンテナへの指示を記述したweb.xmlファイルも同梱されます。コンパイルされると拡張子がWAR(Web ARchive)のファイルとしてWebコンテナに配布されます。 Webアーカイブを作成するには、[ファイル|新規]を選択し、オブジェクトギャラリを表示します。このウィンドウでは、作成可能なファイルの種類が列挙されています。ここでは、[Web]グループの[Webモジュール]という項目を選択します。
Webモジュールを作成するためのウィザードが表示されます。初めに、Webモジュールを既存のファイルを基に作成するか、新規に作成するかを指定します。
ここでは、既存のWebモジュールは存在しないので、[空Webモジュールの作成]を選択します。次に、作成するWebモジュールの名前、サーブレット・JSPのバージョンを指定します。
ここでは名前を「MyServletModule」と指定し、サーブレット・JSPのバージョンはあらかじめ選択されているとおり、Servlet 2.3とJSP 1.2を利用しましょう。また、WARファイルを自動生成するように設定をしておきます。 表1 [Webモジュールの基本属性]ページに設定する値
最後に、StrutsやJSTLなど、追加で必要なフレームワークの有無を指定します。
ここでは、特にこれらを指定する必要はありません。以上で、Webモジュール「MyServletModule」を定義できました。ウィザードが終了すると、Webモジュールデザイナが起動します。この画面では、必要に応じて参照するEJBやセキュリティといった項目を設定できますが、ここでは特に何も設定しなくても構いません。
ステップ3:サーブレットの作成 いよいよサーブレットのひな型を作成します。ここでは、ユーザー名を入力するためのフォームを持つHTMLファイルと、サーブレットを一緒に作ります。初めに、これまでの作業と同様に[ファイル|新規]を選択し、オブジェクトギャラリを表示します。
[Web]グループから[サーブレット]を指定します。サーブレットのひな型を自動生成するサーブレットウィザードが起動します。
作成するサーブレットクラスのクラス名、パッケージ名、格納先のWebモジュールを指定します。ここではクラス名としてMyServletを指定しましょう。パッケージ名は、任意の名前を指定して構いません。 次に、サーブレットに実装するメソッドを指定します。ウィザードには、doGetやdoPostなどの代表的なメソッドのチェックボックスが表示されています。
ここでは、doGetをチェックします。また、ユーザー名を入力するHTMLファイルを生成するために、[HTMLファイルとフォームの生成]オプションにもチェックを付けます。
次に、HTMLフォーム上に作成する入力項目を定義します。ここで設定するパラメータは、後にサーブレットに渡されます。ここでは、ユーザー名を入力するフィールドを追加しましょう。ここでは、作成するサンプルの仕様にあるように、「ユーザー名」を入力するための変数を定義しましょう。
[引数の追加]ボタンを選択し、この情報(ユーザー名)を処理する変数の名前、型、変数名、デフォルト値を指定します。設定する内容は、以下のとおりです 表2 [サーブレットリクエスト引数]に追加するパラメータ
以上で、必要な設定は終了です。[終了]を選択して、ウィザードを終了します。ウィザードが終了すると、サーブレットのひな型が生成され、自動的にサーブレットクラスの編集画面になります。
JBuilderの画面は、大きく分けて3つの領域に分かれています。左上の画面は、プロジェクトに含まれるすべてのファイルが階層構造で表示されている「プロジェクトペイン」という場所です。該当のファイルをダブルクリックすることで編集可能となります。 画面の右側は、編集中のファイルが表示されている「内容ペイン」と呼ばれる画面で、下側のタブで画面を切り替えることでソースコードやJavaDoc、ファイルの編集履歴など、異なる方法でファイルにアクセスできます。左下の部分は、編集中のファイルの構造を解析した内容が表示されている「構造ペイン」という場所で、Javaコードを編集しているときは、編集中のクラスの構造が表示されています。
今回の作業はここまでです。自動生成されたコードの説明は次回に譲りますが、すでに実行可能なコードが生成されているのがお分かりいただけると思います。次回は、自動生成されたコードをベースに、今回のサンプルアプリケーションの仕様を満たすようコードを書き換え、このアプリケーションを完成させます。
|
|