@IT > Java Agile > ツールでトライ!初めてのWebアプリケーション(1)
 

第1回 サーブレットアプリケーションを体験しよう

この連載は、Javaを利用したWebアプリケーションの開発に必要な知識を、ツールを用いて手軽に自分の手を動かしながら覚えていただくことを目的としています。ツールを使うと面倒な設定をすることなく、自分でアプリケーションを試してみることができます。いままでサーブレットのが難しいと感じていた方も、この記事を読んで自分で試すことで、本格的な学習の良いきっかけをつかんでください。(編集局)

ボーランド
新井正広
2004/5/15


JavaによるWebアプリケーションを手軽に試して学習するには

主な内容
JavaによるWebアプリケーションを手軽に試して学習するには
Webアプリケーションの基本原理
サーレットで動くWebアプリケーションとは
実際にサーブレットを作ってみる

 Webアプリケーションを作成するには、多くの前提知識が必要です。そのため、多くの方が「これらの事項をすべて熟知しないと開発がスタートできない」と感じ、結果として「JavaによるWebアプリケーションの開発は難しいな」というところで踏みとどまってしまう傾向があります。これは非常に残念なことです。そこで、この連載では、順序を逆転して、「開発作業を支援するツール」を最大限利用して、まず動作するものを作成していただきます。動作するものが作成できたら、これを自分なりにカスタマイズして、いろいろなことを試してみてください。そのうえで、「実際のアプリケーション開発の中で必要な知識が出てきたら、順次これらを吸収する」というように、少し気楽にJavaによるWebアプリケーション開発を体験していただきたいと思います。

 本連載では「開発作業を支援するツール」として、Borland JBuilder Xトライアル版を利用します。製品をインストールするだけで、アプリケーションの開発に必要なすべてのコンポーネントが自動的にインストール/設定されます。そのため、追加で何らかの作業を行うことなく、Webアプリケーションを試すことができます。

 Borland JBuilder Xトライアル版の入手はボーランドのWebサイトから申し込みが可能です。ここでトライアル版CD-ROMを申し込むと、無償でCD-ROMが郵送されてきますので、インストールガイドに従ってインストールしてください。

 通常、JavaによるWebアプリケーションの開発をスタートするには、Javaに関する知識に加え、以下のような知識や環境のセットアップが必要です。参考までに読んでください。開発ツールを活用することによって、これら必要な作業の多くを自動化、あるいは効率的に進めることが可能になります。

サーブレットを利用したアプリケーション開発に必要な知識
  • サーブレットの特徴
  • サーブレットクラスの継承関係
  • サーブレットクラスのライフサイクル
  • 日本語処理のコツ
  • Webサーバにアプリケーションの実行方法を指示するためのXMLファイルの書き方
  • Webサーバに作成したアプリケーションをインストールするためのファイルの作成方法
  • Webサーバの起動・作成したアプリケーションのインストール・テスト・終了の方法
JavaによるWebアプリケーションの開発に必要なコンポーネント
  • Java 2 SDK (JDK 1.4.2 など)
  • TomcatなどのWebコンテナ (Java対応のWebサーバ)
  • エディタ(あるいは統合開発環境など)
  • Web開発用のPlug-inなど

Webアプリケーションの基本原理

 実際に試してみる前にWebアプリケーションとは何かについて簡単に触れておきましょう。Webアプリケーションとは、Webブラウザからのリクエストによって動的なコンテンツを提供するアプリケーションを指します。クライアントにWebブラウザがインストールされていれば、ネットワークに接続されているあらゆるクライアントにアプリケーション機能を容易に提供できるため、爆発的に適用範囲が増えていることは皆さんもご承知のとおりです。

 クライアントとなるブラウザは、Webサーバに対しリクエストを投げ、これに対しサーバが動的にコンテンツを生成し、クライアントにコンテンツを提供します。

 Webブラウザに動的なWebページを提供する代表的な方法には、CGIなど古くから使われている技術に加え、ここで学習するサーバーサイドJavaと呼ばれる技術が存在します。ここでは、初めに古くから使われている技術であるCGIについて復習をしておきましょう。

図1 Webアプリケーション(CGI)

 Webサーバは、クライアントから要求されたURLのパターンから、これがCGIに対するものであることを認識すると、該当のCGIプロセスを起動し、リクエストの内容を環境変数や標準入力を通じて伝えます。CGIは、これらを解析し、必要なレスポンス(HTMLドキュメント)を組み立て、その内容を標準出力から提供します。つまり、コマンドラインアプリケーションと同じように動作すると考えることができます。このようにCGIは非常に単純な仕組みで構築されていますが、リクエストのたびに新たなプロセスを起動する必要があることから、あまり大規模なシステムでの利用には適さないといわれていました。

HTTPプロトコル

 WebブラウザとWebサーバの間の通信手順は、HTTP(Hyper Text Transfer Protocol・ハイパーテキスト転送プロトコル)として定義されています。HTTPプロトコルに基づいてサーバにリクエストを行う方法には、指定したURLに対するデータを要求するGETメソッド、データを添付してリクエストを行うPOSTメソッドなど、いくつかの命令パターンがあります。

 HTTPの詳細については。連載:インターネット・プロトコル詳説(Master of IP Network)を参考にするとよいでしょう。

サーブレットで動くWebアプリケーションとは

 CGIがWebサーバ上で動作するコマンドラインアプリケーションのように動作するのとは異なり、サーブレットはWebコンテナと呼ばれるJava対応のWebサーバ上で動作するJavaアプリケーションととらえることができます。

 サーブレットを使用してアプリケーションを作成するときは、Java言語でクライアントからの要求に応じたHTMLを動的に生成するクラス(サーブレットクラス)を作成し、TomcatなどのWebコンテナに配備します。

 HTMLを動的に生成するクラス(サーブレットクラス)は、一から作成するのではなく、その基本機能が実装されているjavax.http.HttpServletクラスを派生(拡張)して、オリジナルのコンテンツを生成するプログラムコードを記述します。

 クライアントからのアクセスがあると、Webコンテナは、インストールされたサーブレットの中から、適切なサーブレットクラスのメソッドを呼び出し、レスポンスを受け取り、これをクライアントWebブラウザに返します。

図2 サーブレットの呼び出し

HttpServletクラスとサーブレットのライフサイクル

 一般にサーブレットを作成するときは、javax.http.HttpServletクラスを派生(拡張)して、オリジナルのコンテンツを生成するプログラムコードを記述します。そこで、派生(拡張)クラスの作成方法の前に、そのベースとなるクラスについて、確認しましょう。これらのWebコンテナの一部として提供されており、JBuilder X の場合では「<JBuilderX>/extras/jakarta-tomcat-4.0.6-src.zip」にソースコードが格納されています。

 サーブレットは、図2にあるように、Webコンテナにロードされ、実行されるJavaクラスです。ここで、サーブレットがどのように呼び出されるのかを確認しましょう。サーブレットのライフサイクルを図示したものが図3です。

図3 サーブレットのライフサイクル

 図3に示したようにサーブレットは以下の順序で動作します。

  1. クラスファイルがサーブレットコンテナからJava VM上にロードされる
  2. 初期化メソッドが呼び出され、サーブレットが実行可能な状態となる
  3. クライアントからリクエストがあるとserviceメソッドが呼び出される
  4. 更新されたクラスが配備された場合や、コンテナがシャットダウンするときに、destroyメソッドが呼び出される

 このように、サーブレットはWebコンテナに動作可能な状態として常に待機するので、クライアントからの呼び出しがあると即座に応答します。

実際にサーブレットを作ってみる

 それでは、実際にサーブレットを作成してみましょう。ここでは、多くのプログラミング解説の例にのっとり、入力された名前に返答するいわゆるHello Worldのサーブレット版を作成してみましょう。作成するアプリケーションを実行した様子を以下に示します。

名前を入力することができるHTMLフォーム

「○○さん、こんにちは」という返答を返すサーブレット

 このアプリケーションは、以下のような機能を持つものとします。

  • 名前を入力することができるフォームを表示する(HTMLフォーム)
  • 「入力されたユーザー名+さん、こんにちは」という返答をする

 この要件を満たすアプリケーションを作成するには、以下の4つのファイルを作成する必要があります。

  • 作成するアプリケーション全体を管理するJBuilderプロジェクト(MyServletProj.jpx)
  • Webアプリケーションを管理するためのWebモジュール(MyWebModule)
  • 名前を入力するフォームを持つHTMLファイル(myservlet.html)
  • 「○○さん、こんにちは」と返答するサーブレットクラス(MyServlet.java)
作成すべきファイル

 それでは、これらを順に作成しましょう。

ステップ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モジュールの作成]を選択します。次に、作成するWebモジュールの名前、サーブレット・JSPのバージョンを指定します。

Webモジュールウィザード −モジュール名の指定

 ここでは名前を「MyServletModule」と指定し、サーブレット・JSPのバージョンはあらかじめ選択されているとおり、Servlet 2.3とJSP 1.2を利用しましょう。また、WARファイルを自動生成するように設定をしておきます。

表1 [Webモジュールの基本属性]ページに設定する値
項目名 設定する値
名前 MyWebModule
ディレクトリ MyWebModule
Webアーカイブのビルド プロジェクトまたはモジュールのビルド時
使用可能標準 Servlet 2.3 と JSP 1.2

 最後に、StrutsやJSTLなど、追加で必要なフレームワークの有無を指定します。

Webモジュールウィザード −コンテキスト名とフレームワークの指定

 ここでは、特にこれらを指定する必要はありません。以上で、Webモジュール「MyServletModule」を定義できました。ウィザードが終了すると、Webモジュールデザイナが起動します。この画面では、必要に応じて参照するEJBやセキュリティといった項目を設定できますが、ここでは特に何も設定しなくても構いません。

Webモジュールデザイナ (クリックすると拡大します)

ステップ3:サーブレットの作成

 いよいよサーブレットのひな型を作成します。ここでは、ユーザー名を入力するためのフォームを持つHTMLファイルと、サーブレットを一緒に作ります。初めに、これまでの作業と同様に[ファイル|新規]を選択し、オブジェクトギャラリを表示します。

オブジェクトギャラリ (クリックすると拡大します)

 [Web]グループから[サーブレット]を指定します。サーブレットのひな型を自動生成するサーブレットウィザードが起動します。

サーブレットウィザード −クラス名の指定

 作成するサーブレットクラスのクラス名、パッケージ名、格納先のWebモジュールを指定します。ここではクラス名としてMyServletを指定しましょう。パッケージ名は、任意の名前を指定して構いません。

 次に、サーブレットに実装するメソッドを指定します。ウィザードには、doGetやdoPostなどの代表的なメソッドのチェックボックスが表示されています。

サーブレットウィザード −実装するメソッドの指定

 ここでは、doGetをチェックします。また、ユーザー名を入力するHTMLファイルを生成するために、[HTMLファイルとフォームの生成]オプションにもチェックを付けます。

doGetメソッドとdoPost、doPut、doDeleteメソッド
WebブラウザとWebサーバの間の通信手順は、HTTP(Hyper Text Transfer Protocol・ハイパーテキスト転送プロトコル)として定義されています。HTTPプロトコルに基づいてサーバにリクエストを行う方法には、指定したURLに対するデータを要求するGETメソッド、データを添付してリクエストを行うPOSTメソッドなど、いくつかの命令パターンがあります。doGetメソッドやdoPostメソッドは、これらの通信手順に基づいた応答記述をするためのメソッドです。サーブレットを作成するときの派生元クラスとなるHttpServletクラスでは、あらかじめdoGetやdoPostといったメソッドが定義されています。皆さんは、あらかじめ定義されているメソッドをオーバーライドしてコーディングを行います。なお、通常は、doPutやdoDeleteを使う必要はありません。

 次に、HTMLフォーム上に作成する入力項目を定義します。ここで設定するパラメータは、後にサーブレットに渡されます。ここでは、ユーザー名を入力するフィールドを追加しましょう。ここでは、作成するサンプルの仕様にあるように、「ユーザー名」を入力するための変数を定義しましょう。

サーブレットウィザード −リクエスト引数の指定

 [引数の追加]ボタンを選択し、この情報(ユーザー名)を処理する変数の名前、型、変数名、デフォルト値を指定します。設定する内容は、以下のとおりです

表2 [サーブレットリクエスト引数]に追加するパラメータ
項目名 設定する値
名前 myName
String
説明 ユーザー名
変数 myName
デフォルト (無記入)

 以上で、必要な設定は終了です。[終了]を選択して、ウィザードを終了します。ウィザードが終了すると、サーブレットのひな型が生成され、自動的にサーブレットクラスの編集画面になります。

サーブレットクラスのひな型が生成されたところ (クリックすると拡大します)

 JBuilderの画面は、大きく分けて3つの領域に分かれています。左上の画面は、プロジェクトに含まれるすべてのファイルが階層構造で表示されている「プロジェクトペイン」という場所です。該当のファイルをダブルクリックすることで編集可能となります。

 画面の右側は、編集中のファイルが表示されている「内容ペイン」と呼ばれる画面で、下側のタブで画面を切り替えることでソースコードやJavaDoc、ファイルの編集履歴など、異なる方法でファイルにアクセスできます。左下の部分は、編集中のファイルの構造を解析した内容が表示されている「構造ペイン」という場所で、Javaコードを編集しているときは、編集中のクラスの構造が表示されています。

doGet以外に自動生成されたメソッド-サーブレットのライフサイクルについて
作成されたサーブレットのソースコードを見ると、ウィザードでチェックを付けたdoGetメソッド以外にも、initやdestroyといったメソッドが定義されています。これらは、自動生成されたコメントにも記載されているようにアプリケーションの初期化時や終了時に1度だけ呼び出されるコードです。サーブレットは以下の順序で動作します。
  1. クラスファイルがJava VMに読み込まれる(ロードされる)
  2. 2. 初期化メソッド(init)が呼び出され、サーブレットが実行可能な状態となる
  3. クライアントからリクエストがあるとdoGetメソッドやdoPostメソッドが呼び出される
  4. Webサーバが終了する前もしくは新しいサーブレットに更新する前にdestroyメソッドが呼び出される
このように、サーブレットはWebコンテナに動作可能な状態として常に待機するので、クライアントからの呼び出しがあると即座に応答できるのです。

 今回の作業はここまでです。自動生成されたコードの説明は次回に譲りますが、すでに実行可能なコードが生成されているのがお分かりいただけると思います。次回は、自動生成されたコードをベースに、今回のサンプルアプリケーションの仕様を満たすようコードを書き換え、このアプリケーションを完成させます。


Java Solution全記事一覧