First Previous Next Last チュートリアル : WEBアプリケーションの開発  05/19/03 09:45:01 

Lesson 1    MVCアプリケーションのアーキテクチャ

 
Top of page

学習する内容

このレッスンでは、Proverbsアプリケーションのアーキテクチャ、およびStrutsを使用したMVC (Model-View-Controller)設計パターンの実装方法について説明します。 また、このレッスンでは、Novell exteNd Workbenchを使用して、完成したプロジェクトからいくつかのファイルを検査し、アプリケーションがどのように組み合わせられるかを理解します。 後のレッスンでは、Workbenchを使用して、Proverbsアプリケーションの部分を開発します。

学習内容は次のとおりです。

注記:   J2EE設計およびStrutsについて理解している場合や、ただちに使い始める場合は、アプリケーションのこのガイドをスキップして、 Lesson 2, データソースの設定からの説明に従ってWorkbenchを使用し始めることができます。

 
Top of section

実行する操作

  1. Workbenchを起動し、ProverbFinalプロジェクトを開く

  2. ナビゲーションバーのソースコードを参照する

  3. テキストリソースファイルを参照する

  4. HTMLフォームのStrutsバージョンを参照する

  5. ActionServlet JavadocおよびProverbActionServletクラスを参照する

  6. Struts設定ファイルを参照する

  7. TodayActionクラスのソースコードを参照する

  8. ソースコードを参照してことわざのデータにアクセスする

所要時間   約25分

注記:   このレッスンでは、J2EEアプリケーションサーバを実行している必要はありません。

 
Top of page

ProverbsアプリケーションでのMVCおよびStrutsの実装方法

Proverbsチュートリアルは、WAR (Web Archive)としてパッケージ化され、J2EEアプリケーションサーバに配備されたアプリケーションであるWebアプリケーションです。 WARの標準の機能には、次のものが含まれます。

 
Top of section

MVCとは

Model-View-Controller設計パターンでは、アプリケーションのコードを分割して、ユーザインタフェース(ビュー)をビジネス論理(モデル)から切り離しておく方法を指定します。 コントローラでは、ユーザリクエストがどのようにページにルーティングされ、各リクエストを処理するためにどのビジネス論理が呼び出されるかを決定します。

ビューのJSPページとコントローラのサーブレットを組み合わせたものは、モデル2と呼ばれ、WebアプリケーションでMVCアーキテクチャを実装するために現在承認されている方法です。

Proverbsアプリケーションでは、ユーザインタフェースをビジネス論理から切り離し、コントローラサーブレットを使用してアプリケーションの流れを管理することによって、MVCアーキテクチャを実装します。

For more information    MVCアーキテクチャについては多数の説明がありますが、ここでは詳述しません。 詳細については、Sun MicrosystemsのWebサイトの J2EE Blueprintsを参照してください。

 
Top of section

Strutsとは

Strutsは、 Apache Software FoundationのJakartaプロジェクトの一部であり、 WebアプリケーションのMVCを実装するフレームワークです。 これによって、JSPページで情報表示を処理するサーブレットコントローラ、タグライブラリ、およびフォームクラスや、どのクラスをインスタンス化してアプリケーションデータを処理するかをコントローラに通知する設定ファイルも提供されます。

一般的なStrutsアプリケーションには、次のものが含まれます。

StrutsによるMVCの実装方法についての簡単な概要は、次のとおりです。

部分

説明

モデル

アクションクラスでは、リクエストまたはセッションを使用して、アプリケーションの状態に関する情報を保存します。 アクションクラスでは、ビジネス論理クラスをインスタンス化して、アプリケーションデータを処理できます。

アクションクラスは、コントローラで処理される各URLに対して作成します。

ビュー

JSPページおよびActionForm Beanにより、データおよびフォームが表示されます。 ActionForm Beanでは、フォームフィールドにデータを入力し、そのデータを保持、検証します。 このデータは、リクエスト間で使用可能な状態のままにすることができ、また、フォームでは、前に入力されたデータを再び表示することができます。

ActionFormクラスは、JSPページの各フォームに対して作成します。

コントローラ

ActionServletクラス(またはその拡張)は、サーバプロセスとして実行し、このクラスで認識されたURLを処理します。 このクラスでは、struts-config.xmlファイルを読み込み、インスタンス化するアクションクラス、および各URLに対して表示するJSPページを検出します。

ActionServletクラスは、そのまま使用したり、カスタム動作を提供するように拡張したりすることができます。

 
Top of section

チュートリアルアプリケーションのMVC構造

アプリケーションによるMVCパターンの実装方法は、次の図のとおりです。

Tut1 ProverbAppStruct

 
Top of section

チュートリアルアプリケーションの検査

Proverbsアプリケーションの概要を理解するには、Workbenchを起動して、完成したバージョンのコードを参照します。 後のレッスンでは、データソースをセットアップして、アプリケーションを配備、実行する方法について学習します。

 
Top of section

EXERCISE 1-1: Workbenchを起動し、ProverbFinalプロジェクトを開く

  1. Workbenchを起動します。 Windowsの[スタート]メニューにあるNovell exteNd Workbenchのショートカットを使用できます。

  2. File]>[Open Project]の順に選択します。

  3. Workbenchの/docs/tutorial/ProverbFinalディレクトリでProverbFinal.spfファイルを検索し、[Open]をクリックします。

    注記:   デフォルトのインストールディレクトリは、Program Files/Novell/exteNd Workbenchです。

  4. View using]リストボックスで、[Archive layout]が選択されていない場合は選択します。

    左上のナビゲーションペインに、プロジェクトのアーカイブレイアウトが表示されます。

    Tut1-1

  5. アーカイブフォルダを展開し、各フォルダ内にあるファイルを参照します。 ファイルは、ナビゲーションペインの下部に表示されます。

このレッスンのエクササイズの残りでは、これらのファイルにおけるMVCおよびStrutsの実装の詳細について学習します。

 
Top of page

ビューの実装

Proverbsアプリケーションには、次の3つの主要なアクティビティがあります。

ウェルカムページまたは開始ページは、index.jspです。移動は、他のすべてのページにJSPフラグメントのmenu.jspを含めることによって処理されます。 menu.jspには、3つの主要なアクティビティへのリンクが含まれています。

次の図では、2行目に3つの主要なアクティビティが示されています。 アクティビティにフォームの送信が関与している場合は、3行目に結果を表示するページが示されます。

Tut1 ProverbUIFlow

 
Top of section

EXERCISE 1-2: ナビゲーションバーのソースコードを参照する

  1. ナビゲーションペインで、ProverbFinal.spfというプロジェクトファイル名を選択します。

    JSPページは、アーカイブのルートにあり、ペインの下部にリストされています。

  2. menu.jsp]をダブルクリックして、[Edit]ペインで開きます。

    Tut1-2menu

  3. リンクおよびメッセージのカスタムタグに注目します。 リンクタグでは、ナビゲーションメニューの項目に対してURLが指定され、メッセージタグでは、リソースファイルからの表示テキストが取得されます。

      <strutshtml:link href="today.do">
        <strutsbean:message key="nav.todaysproverb" /> 
      </strutshtml:link>
    

    menu.jspは不完全なJSPページであり、タグライブラリを識別したり、HTMLラッパ要素を提供したりする導入タグはありません。 menu.jspは、別のファイルに含まれる必要があります。

  4. index.jsp]をダブルクリックすると、[Edit]ペインで開かれます。

    Tut1-2index

  5. ファイルの開始付近にあるtaglibディレクティブに注目します。

      <%@ taglib uri="struts-html.tld" prefix="strutshtml" %>
      <%@ taglib uri="struts-bean.tld" prefix="strutsbean" %>
    

    これらのディレクティブは、カスタムタグの定義を検索する場所をJSPページに通知します。

  6. メニューコードを挿入する本文タグの後にあるJSP includeディレクティブに注目します。

      <%@ include file="menu.jsp"%>
    

    メニューコードは、index.jspの残りで埋め込まれてからコンパイルされています。index.jspおよびmenu.jspの両方で使用されるすべてのライブラリに対して、index.jspにtaglibディレクティブがあります。

  7. [Edit]ペインの右上にある閉じるボタンをクリックして、ファイルをそれぞれ閉じます。

 
Top of section

Strutsによる各国対応およびローカリゼーションの有効方法

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)。

For more information    詳細については、JDKのドキュメント( java.sun.com/j2se/1.3/docs/api)でResourceBundleクラスを参照してください。

 
Top of section

EXERCISE 1-3: テキストリソースファイルを参照する

  1. Workbenchのナビゲーションペインで、WEB-INFディレクトリツリーを展開して、WEB-INF/classes/com/proverbディレクトリを選択します。

  2. リストの最後にある[ApplicationResources.properties]をダブルクリックして、[Edit]ペインで開きます。

  3. メッセージキーおよび値を参照します。 これらのメッセージキーは、ウェルカムページで使用されます。

      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...
    
  4. ナビゲーションペインで、[ProverbFinal.spf]を選択してから、ファイルリストにある[index.jsp]をダブルクリックします。

  5. 前のメッセージキーを参照するStrutsメッセージタグを検索します。 [Search]>[Find]の順に選択してから、[Find Next](または<F3>)を選択して、すべてを検索します。

    Tut1-3find

  6. (オプション)他のJSPファイルでもメッセージタグを検索します。

  7. ファイルを閉じます。

 
Top of section

Strutsタグを使用したフォームの作成方法

Struts HTMLタグライブラリのカスタムタグでは、標準のHTML要素を実装し、Struts処理と結び付けます。 フォームタグでは、送信されるフォームのターゲットURL、およびこのフォームのフィールドに対するプロパティを持つActionFormクラスを指定します。 各フォームタグ内では、さまざまなHTML入力フィールドの他のStrutsタグによってセットアップおよび処理が行われます。

このフォームタグに対するアクションは、コントローラサーブレットにより認識されます。

  <strutshtml:form action="results.do" name="selectForm" type="com.proverb.SelectForm">

各フォームでは、入力フィールドに一致するプロパティを使用してActionFormクラスを定義します。 このクラスでは、ユーザ入力を検証し、リクエスト間でデータを保存できます。 アプリケーションでフォームを再表示する必要性が生じた場合、ユーザのデータはこのクラスから復元することができます。

 
Top of section

EXERCISE 1-4: HTMLフォームのStrutsバージョンを参照する

  1. ナビゲーションペインで、[ProverbFinal.spf]を選択し、JSPファイルのリストを表示します。

  2. select.jsp]をダブルクリックして、[Edit]ペインで開きます。

  3. フォームタグを検索します。 これは、strutshtml:formで始まっています。

  4. フォームのフィールドを参照します。 これらは、テーブル行に整理されています。

  5. (オプション) ApplicationResources.propertiesファイルをもう一度開き、各メッセージタグで表示されるテキストを検索します。

  6. ナビゲーションペインで、WEB-INFディレクトリをproverbディレクトリまで下に展開して、[proverb]フォルダを選択します。

  7. SelectForm.java]をダブルクリックして、[Edit]ペインで開きます。

  8. ActionFormが拡張されていることに注目します。

    クラスはJavaBeanで、インスタンス変数はGetメソッドおよびSetメソッドを使用したプロパティです。 プロパティは、フォームのフィールドに対応します。 また、Beanは、プロパティとしてcountryListコレクションもセットアップします。 getList()メソッドは、データベースでリストデータを検索します。

  9. ファイルを閉じます。

 
Top of page

コントローラの実装

コントローラは、URLをリッスンして、次の適切なステップにアプリケーションをルーティングするサーブレットです。 WARの配備記述子では、サーブレットマッピングによって、サーブレットで処理されるカスタムURLが指定されます。

  <servlet-mapping>
     <servlet-name>action</servlet-name>
     <url-pattern>*.do</url-pattern>
  </servlet-mapping>

Proverbsアプリケーションでは、関連付けられたJSPページに対する事前処理およびデータセットアップを識別するために、フォームによってcontribute.doselect.doのようなURLが使用されます。 Struts設定ファイル(後の説明を参照)では、コントローラに対する関連付けをセットアップします。

 
Top of section

EXERCISE 1-5: ActionServlet JavadocおよびProverbActionServletクラスを参照する

  1. 別のブラウザウィンドウを開き、StrutsのWebサイト( jakarta.apache.org/struts)にアクセスします。

  2. Javadoc]リンクをクリックして、ActionServletクラスを参照します。 ここでは、StrutsのMVC実装について説明されています。

  3. Workbenchのナビゲーションペインで、WEB-INFディレクトリをproverbディレクトリまで下に展開して、[proverb]フォルダを選択します。

  4. ProverbActionServlet.java]をダブルクリックして、[Edit]ペインで開きます。 StrutsのActionServletクラスが拡張されていることに注目します。

  5. init()メソッドを参照します。

    Proverbsアプリケーションにより、一部の初期化タスクを実行するinit()メソッドが上書きされます。 また、サーバからProverbsデータベースのDataSourceオブジェクトが取得され、サーブレットコンテキストに保存されます。

  6. ファイルを閉じます。

  7. (オプション)特別に開いたブラウザウィンドウを閉じます。

 
Top of section

Strutsでのアクションの処理方法

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>

次のような表は、アプリケーションの流れ、および各手順で必要なクラスを計画する上で役立ちます。

リクエストURI

アクションクラス(「タイプ」と呼ばれる)

フォーム名

入力JSP*

その他の属性

転送マッピング: 名前およびパス

select.do

com.proverb.SelectAction

selectForm

-

scope=session

validate=false

success; /select.jsp

failure; /select.jsp

cancel; /index.jsp

results.do

com.proverb.SelectAction

selectForm

select.jsp

scope=session

success; /selectResults.jsp

failure; /selectFailed.jsp

cancel; /index.jsp

* 入力JSPページは、送信されたフォームをURLで処理する際に使用されます。 フォームをセットアップするアクションに対しては、入力属性は省略されます。

 
Top of section

EXERCISE 1-6: Struts設定ファイルを参照する

  1. ナビゲーションペインのアーカイブレイアウトで[WEB-INF]を選択します。

  2. ファイルリストで[struts-config.xml]をダブルクリックし、[Edit]ペインで開きます。

    Tut1-6config

  3. form-beanセクションで2つのform-bean要素を参照します。 これらの要素によって、アプリケーションでフォームをサポートしているクラスが識別されます。

  4. action-mappingsセクションでaction要素を参照します。

    Tut1-6action

  5. (オプション)各action要素を検査し、残りのアクションに対して前のような表を作成します。 これは機械的な作業ですが、残りのチュートリアルでアプリケーションの部分を認識する上で役立ちます。

  6. 完了したら、ファイルを閉じます。

 
Top of page

モデルの実装

Strutsアプリケーションでは、コントローラで呼び出されるアクションクラスによってモデルが実装されます。 アクションクラスでは、送信されたデータおよび他の関連する条件に基づき、アプリケーションの状態を変更します。 アクションクラスでは、すべての処理を実行したり、アプリケーションに固有のビジネス論理に対して他のクラスを呼び出したりすることができます。 Proverbsアプリケーションでは、データベースにアクセスするために、アクションクラスによって他のクラスがインスタンス化されます。

 
Top of section

EXERCISE 1-7: TodayActionクラスのソースコードを参照する

  1. ナビゲーションペインで、必要な場合はWEB-INFディレクトリを展開し、[proverb]フォルダを選択します。

  2. TodayAction.java]をダブルクリックして、[Edit]ペインで開きます。

  3. サーブレットコンテキストに保存されたDataSourceを取得するコードを参照します。 このコードでは、DataSourceを使用してProverbDataAccessクラスをインスタンス化し、getTodaysProverb()メソッドを呼び出します。

  4. ファイルを閉じます。

データアクセスについては、次の節でさらに詳しく説明します。

 
Top of page

アプリケーションのデータ

アプリケーションのデータは、ことわざのデータベースです。 アプリケーションでは、SQLを使用してデータを取得し、ユーザがことわざを提供した場合にはデータベースを更新します。

後のレッスンでは、選択したDBMSを使用してデータベースをセットアップします。 データがセットアップされると、アプリケーションを配備して実行できます。

 
Top of section

EXERCISE 1-8: ソースコードを参照してことわざのデータにアクセスする

このエクササイズでは、Constants.java、Proverb.java、およびProverbDataAcess.javaという3つのファイルを参照します。

  1. WEB-INF]フォルダを展開して、[proverb]フォルダを選択します。

  2. ファイルリストで[Constants.java]をダブルクリックし、[Edit]ペインで開きます。

  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に対して微調整できます。

  4. ファイルリストで、[Proverb.java]をダブルクリックします。

  5. データベースのProverbテーブルの列に一致するインスタンス変数を参照します。

    Proverb Beanでは、データベースのデータの行がカプセル化されます。 各Proverb Beanは、ことわざの情報を表示する際にJSPページによってアクセスされるコレクションに追加されます。

  6. ファイルリストで、[ProverbDataAccess.java]をダブルクリックします。

  7. コンストラクタによってDataSourceオブジェクトがインスタンス変数で保存されていることに注目します。

    呼び出し元では、ProverbDataAccessをインスタンス化する前に、サーブレットコンテキストからDataSourceオブジェクトを取得します。 DataSourceオブジェクトは、初期化中にProverbActionServletによってサーブレットコンテキストに保存されています。

  8. Search]>[Find]の順に選択して、getProverbList()メソッドまたはgetTodaysProverb()メソッドを検索します。

    これらのメソッドでは、それぞれ前半部でSQLステートメントが作成されます。 後半部では、接続を取得するためにコードによってデータソースが使用されます。 その後、SQLが送信され、結果セットが処理されます。

  9. メニューから[File]>[Close Project]の順に選択して、ProverbFinalプロジェクトを閉じます。

 
Top of page

実行した内容のまとめ

アプリケーションの開発   このレッスンでは、Model-View-Controller設計パターン、およびProverbsアプリケーションでStrutsを使用してMVCを実装する方法について学習しました。

Workbenchツールの使用   Workbenchでは、次のツールを使用しました。

次のレッスン   次のレッスンでは、チュートリアルアプリケーションのデータベースについて学習します。

    First Previous Next Last チュートリアル : 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.