チュートリアル : WEBアプリケーションの開発 05/19/03 09:45:01 |
このレッスンでは、Proverbsアプリケーションのアーキテクチャ、およびStrutsを使用したMVC (Model-View-Controller)設計パターンの実装方法について説明します。 また、このレッスンでは、Novell exteNd Workbenchを使用して、完成したプロジェクトからいくつかのファイルを検査し、アプリケーションがどのように組み合わせられるかを理解します。 後のレッスンでは、Workbenchを使用して、Proverbsアプリケーションの部分を開発します。
注記: J2EE設計およびStrutsについて理解している場合や、ただちに使い始める場合は、アプリケーションのこのガイドをスキップして、 Lesson 2, データソースの設定からの説明に従ってWorkbenchを使用し始めることができます。
注記: このレッスンでは、J2EEアプリケーションサーバを実行している必要はありません。
Proverbsチュートリアルは、WAR (Web Archive)としてパッケージ化され、J2EEアプリケーションサーバに配備されたアプリケーションであるWebアプリケーションです。 WARの標準の機能には、次のものが含まれます。
Model-View-Controller設計パターンでは、アプリケーションのコードを分割して、ユーザインタフェース(ビュー)をビジネス論理(モデル)から切り離しておく方法を指定します。 コントローラでは、ユーザリクエストがどのようにページにルーティングされ、各リクエストを処理するためにどのビジネス論理が呼び出されるかを決定します。
ビューのJSPページとコントローラのサーブレットを組み合わせたものは、モデル2と呼ばれ、WebアプリケーションでMVCアーキテクチャを実装するために現在承認されている方法です。
Proverbsアプリケーションでは、ユーザインタフェースをビジネス論理から切り離し、コントローラサーブレットを使用してアプリケーションの流れを管理することによって、MVCアーキテクチャを実装します。
MVCアーキテクチャについては多数の説明がありますが、ここでは詳述しません。 詳細については、Sun MicrosystemsのWebサイトの J2EE Blueprintsを参照してください。
Strutsは、 Apache Software FoundationのJakartaプロジェクトの一部であり、 WebアプリケーションのMVCを実装するフレームワークです。 これによって、JSPページで情報表示を処理するサーブレットコントローラ、タグライブラリ、およびフォームクラスや、どのクラスをインスタンス化してアプリケーションデータを処理するかをコントローラに通知する設定ファイルも提供されます。
一般的なStrutsアプリケーションには、次のものが含まれます。
テキストの表示、データ入力に対するフォームの作成、およびページに表示するデータの集合の処理を行うStrutsカスタムタグを使用した「JSPページ」
アクションクラスにリクエストをルーティングして、表示するJSPページを選択するコントローラとして機能する「アクションサーブレット」
StrutsによるMVCの実装方法についての簡単な概要は、次のとおりです。
アプリケーションによるMVCパターンの実装方法は、次の図のとおりです。
Proverbsアプリケーションの概要を理解するには、Workbenchを起動して、完成したバージョンのコードを参照します。 後のレッスンでは、データソースをセットアップして、アプリケーションを配備、実行する方法について学習します。
Workbenchを起動します。 Windowsの[スタート]メニューにあるNovell exteNd Workbenchのショートカットを使用できます。
Workbenchの/docs/tutorial/ProverbFinalディレクトリでProverbFinal.spfファイルを検索し、[Open]をクリックします。
注記: デフォルトのインストールディレクトリは、Program Files/Novell/exteNd Workbenchです。
[View using]リストボックスで、[Archive layout]が選択されていない場合は選択します。
左上のナビゲーションペインに、プロジェクトのアーカイブレイアウトが表示されます。
アーカイブフォルダを展開し、各フォルダ内にあるファイルを参照します。 ファイルは、ナビゲーションペインの下部に表示されます。
このレッスンのエクササイズの残りでは、これらのファイルにおけるMVCおよびStrutsの実装の詳細について学習します。
Proverbsアプリケーションには、次の3つの主要なアクティビティがあります。
ことわざが由来する国、またはテキストや変換に含まれるキーワードを指定することによって、ユーザがことわざを検索できるようにする機能(select.jsp、selectResults.jsp、selectFailed.jsp)
ユーザがことわざを提供できるようにする機能(contribute.jsp、contributeResult.jsp、contributeFailed.jsp)
ウェルカムページまたは開始ページは、index.jspです。移動は、他のすべてのページにJSPフラグメントのmenu.jspを含めることによって処理されます。 menu.jspには、3つの主要なアクティビティへのリンクが含まれています。
次の図では、2行目に3つの主要なアクティビティが示されています。 アクティビティにフォームの送信が関与している場合は、3行目に結果を表示するページが示されます。
ナビゲーションペインで、ProverbFinal.spfというプロジェクトファイル名を選択します。
JSPページは、アーカイブのルートにあり、ペインの下部にリストされています。
[menu.jsp]をダブルクリックして、[Edit]ペインで開きます。
リンクおよびメッセージのカスタムタグに注目します。 リンクタグでは、ナビゲーションメニューの項目に対してURLが指定され、メッセージタグでは、リソースファイルからの表示テキストが取得されます。
<strutshtml:link href="today.do"> <strutsbean:message key="nav.todaysproverb" /> </strutshtml:link>
menu.jspは不完全なJSPページであり、タグライブラリを識別したり、HTMLラッパ要素を提供したりする導入タグはありません。 menu.jspは、別のファイルに含まれる必要があります。
[index.jsp]をダブルクリックすると、[Edit]ペインで開かれます。
ファイルの開始付近にあるtaglibディレクティブに注目します。
<%@ taglib uri="struts-html.tld" prefix="strutshtml" %> <%@ taglib uri="struts-bean.tld" prefix="strutsbean" %>
これらのディレクティブは、カスタムタグの定義を検索する場所をJSPページに通知します。
メニューコードを挿入する本文タグの後にあるJSP includeディレクティブに注目します。
<%@ include file="menu.jsp"%>
メニューコードは、index.jspの残りで埋め込まれてからコンパイルされています。index.jspおよびmenu.jspの両方で使用されるすべてのライブラリに対して、index.jspにtaglibディレクティブがあります。
Strutsでは、テキスト管理とローカリゼーションを簡単にするため、Javaリソースバンドルおよびメッセージカスタムタグを使用します。 メッセージタグにより、JSPページの外観の判断が編集時に困難になりますが、アプリケーションテキストの編集および変換は、単一のファイルに収集するとより簡単になります。
「リソースバンドル」は、関連するプロパティファイルのグループです。 メインファイルには、アプリケーションのデフォルト言語でのテキストが含まれます。 ファイルでは、各プロパティは次のような形式になり、keyはコードで参照する値、valueはアプリケーションで表示されるテキストをそれぞれ示しています。
key=value
配備記述子(web.xml)では、サーブレット初期化パラメータによって、アプリケーションのテキストを含むプロパティファイルが識別されます。
<init-param> <param-name>application</param-name> <param-value>com.proverb.ApplicationResources</param-value> </init-param>
他の言語でのテキストを提供するには、同じメッセージキーと変換されたテキストを使用して追加のファイルを作成します。 各ファイルには、名前に2文字のISO言語コードが含まれます(例: ApplicationResource_xx.properties)。
詳細については、JDKのドキュメント( java.sun.com/j2se/1.3/docs/api)でResourceBundleクラスを参照してください。
Workbenchのナビゲーションペインで、WEB-INFディレクトリツリーを展開して、WEB-INF/classes/com/proverbディレクトリを選択します。
リストの最後にある[ApplicationResources.properties]をダブルクリックして、[Edit]ペインで開きます。
メッセージキーおよび値を参照します。 これらのメッセージキーは、ウェルカムページで使用されます。
site.title=Words of Wisdom site.greeting=Welcome to Words of Wisdom site.info=Return each day to read a proverb<br>from somewhere around the world...
ナビゲーションペインで、[ProverbFinal.spf]を選択してから、ファイルリストにある[index.jsp]をダブルクリックします。
前のメッセージキーを参照するStrutsメッセージタグを検索します。 [Search]>[Find]の順に選択してから、[Find Next](または<F3>)を選択して、すべてを検索します。
Struts HTMLタグライブラリのカスタムタグでは、標準のHTML要素を実装し、Struts処理と結び付けます。 フォームタグでは、送信されるフォームのターゲットURL、およびこのフォームのフィールドに対するプロパティを持つActionFormクラスを指定します。 各フォームタグ内では、さまざまなHTML入力フィールドの他のStrutsタグによってセットアップおよび処理が行われます。
このフォームタグに対するアクションは、コントローラサーブレットにより認識されます。
<strutshtml:form action="results.do" name="selectForm" type="com.proverb.SelectForm">
各フォームでは、入力フィールドに一致するプロパティを使用してActionFormクラスを定義します。 このクラスでは、ユーザ入力を検証し、リクエスト間でデータを保存できます。 アプリケーションでフォームを再表示する必要性が生じた場合、ユーザのデータはこのクラスから復元することができます。
(オプション) ApplicationResources.propertiesファイルをもう一度開き、各メッセージタグで表示されるテキストを検索します。
ナビゲーションペインで、WEB-INFディレクトリをproverbディレクトリまで下に展開して、[proverb]フォルダを選択します。
クラスはJavaBeanで、インスタンス変数はGetメソッドおよびSetメソッドを使用したプロパティです。 プロパティは、フォームのフィールドに対応します。 また、Beanは、プロパティとしてcountryListコレクションもセットアップします。 getList()メソッドは、データベースでリストデータを検索します。
コントローラは、URLをリッスンして、次の適切なステップにアプリケーションをルーティングするサーブレットです。 WARの配備記述子では、サーブレットマッピングによって、サーブレットで処理されるカスタムURLが指定されます。
<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
Proverbsアプリケーションでは、関連付けられたJSPページに対する事前処理およびデータセットアップを識別するために、フォームによってcontribute.doやselect.doのようなURLが使用されます。 Struts設定ファイル(後の説明を参照)では、コントローラに対する関連付けをセットアップします。
別のブラウザウィンドウを開き、StrutsのWebサイト( jakarta.apache.org/struts)にアクセスします。
[Javadoc]リンクをクリックして、ActionServletクラスを参照します。 ここでは、StrutsのMVC実装について説明されています。
Workbenchのナビゲーションペインで、WEB-INFディレクトリをproverbディレクトリまで下に展開して、[proverb]フォルダを選択します。
[ProverbActionServlet.java]をダブルクリックして、[Edit]ペインで開きます。 StrutsのActionServletクラスが拡張されていることに注目します。
Proverbsアプリケーションにより、一部の初期化タスクを実行するinit()メソッドが上書きされます。 また、サーバからProverbsデータベースのDataSourceオブジェクトが取得され、サーブレットコンテキストに保存されます。
struts-config.xmlファイルでは、アプリケーションのURLが識別され、コントローラでの処理方法が説明されます。
ファイルの最初のセクションでは、form-bean要素によって、アプリケーションにおけるフォームのクラスが識別されます。
<form-beans> <form-bean name="selectForm" type="com.proverb.SelectForm"/>
2番目のセクションでは、action要素によって、URLおよびURLの処理方法が識別されます。 action要素は、アプリケーションの各URLに対して存在します。 URLのXMLは、次のとおりです。
<action path="/select" type="com.proverb.SelectAction" name="selectForm" scope="session" validate="false"> <forward name="success" path="/select.jsp"/> <forward name="failure" path="/select.jsp"/> <forward name="cancel" path="/index.jsp"/> </action>
次のような表は、アプリケーションの流れ、および各手順で必要なクラスを計画する上で役立ちます。
* 入力JSPページは、送信されたフォームをURLで処理する際に使用されます。 フォームをセットアップするアクションに対しては、入力属性は省略されます。
ファイルリストで[struts-config.xml]をダブルクリックし、[Edit]ペインで開きます。
form-beanセクションで2つのform-bean要素を参照します。 これらの要素によって、アプリケーションでフォームをサポートしているクラスが識別されます。
action-mappingsセクションでaction要素を参照します。
(オプション)各action要素を検査し、残りのアクションに対して前のような表を作成します。 これは機械的な作業ですが、残りのチュートリアルでアプリケーションの部分を認識する上で役立ちます。
Strutsアプリケーションでは、コントローラで呼び出されるアクションクラスによってモデルが実装されます。 アクションクラスでは、送信されたデータおよび他の関連する条件に基づき、アプリケーションの状態を変更します。 アクションクラスでは、すべての処理を実行したり、アプリケーションに固有のビジネス論理に対して他のクラスを呼び出したりすることができます。 Proverbsアプリケーションでは、データベースにアクセスするために、アクションクラスによって他のクラスがインスタンス化されます。
サーブレットコンテキストに保存されたDataSourceを取得するコードを参照します。 このコードでは、DataSourceを使用してProverbDataAccessクラスをインスタンス化し、getTodaysProverb()メソッドを呼び出します。
アプリケーションのデータは、ことわざのデータベースです。 アプリケーションでは、SQLを使用してデータを取得し、ユーザがことわざを提供した場合にはデータベースを更新します。
後のレッスンでは、選択したDBMSを使用してデータベースをセットアップします。 データがセットアップされると、アプリケーションを配備して実行できます。
このエクササイズでは、Constants.java、Proverb.java、およびProverbDataAcess.javaという3つのファイルを参照します。
データを選択して、WHERE句を作成するSQL文字列に注目します。 たとえば、データアクセスコードでは、これらの2つの文字列は、クエリを作成するためにWHEREで結合されています。
public static final String SQL_SELECT_PROVERB = "SELECT proverbtext, pvbtranslation, source from proverbs "; public static final String SQL_WHERE_TODAYSPROVERB = "proverbid = (select proverbid from todaysproverb where dayofyear=%p) ";
これらの定数は、必要な場合、異なるDBMSに対して微調整できます。
データベースのProverbテーブルの列に一致するインスタンス変数を参照します。
Proverb Beanでは、データベースのデータの行がカプセル化されます。 各Proverb Beanは、ことわざの情報を表示する際にJSPページによってアクセスされるコレクションに追加されます。
コンストラクタによってDataSourceオブジェクトがインスタンス変数で保存されていることに注目します。
呼び出し元では、ProverbDataAccessをインスタンス化する前に、サーブレットコンテキストからDataSourceオブジェクトを取得します。 DataSourceオブジェクトは、初期化中にProverbActionServletによってサーブレットコンテキストに保存されています。
[Search]>[Find]の順に選択して、getProverbList()メソッドまたはgetTodaysProverb()メソッドを検索します。
これらのメソッドでは、それぞれ前半部でSQLステートメントが作成されます。 後半部では、接続を取得するためにコードによってデータソースが使用されます。 その後、SQLが送信され、結果セットが処理されます。
メニューから[File]>[Close Project]の順に選択して、ProverbFinalプロジェクトを閉じます。
アプリケーションの開発 このレッスンでは、Model-View-Controller設計パターン、およびProverbsアプリケーションでStrutsを使用してMVCを実装する方法について学習しました。
Workbenchツールの使用 Workbenchでは、次のツールを使用しました。
次のレッスン 次のレッスンでは、チュートリアルアプリケーションのデータベースについて学習します。
チュートリアル : WEBアプリケーションの開発 05/19/03 09:45:01 |
Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC, a wholly owned subsidiary of Novell, Inc. All rights reserved.