■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2008年06月08日

    楽しいJava講座 - 初心者から達人へのパスポート
                  vol.107

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.Strutsのアプリケーション開発
========================================================


さて、このvalidate()メソッドのソース・コードでは、書き出すべきエラー・
メッセージをActionMessageという型のオブジェクトで指定し、そのオブジェクトを、
ActionErrorsという型のオブジェクトに追加(ActionErrorsのadd()メソッドを実行)
し、ActionErrorsオブジェクトを戻り値として返します。
このようにしておくと、ActionServletは(もっと正確に言うとActionServletは内部で
RequestProcessorというオブジェクトを呼び出して実質的な処理をさせており、その
RequestProcessorが)戻り値(ActionErrors型)を調べてそれが空っぽの場合(null、
またはnullでなくてもエラー・メッセージが設定されていない場合)にはActionオブ
ジェクト(ここではexamples.simple.ProcessSimpleAction)のexecute()メソッドを
実行し、戻り値(ActionErrors型)が空っぽでない場合には、Actionオブジェクトは
実行せずに、struts-config.xmlのactionタグのinput属性で指定されたWebページ
(ここでは/jsp/simple/Simple.jsp)に遷移することになります。

Simple.jspは前に表示されていたのと同じWebページですね。したがって、ここでは
前と同じWebページを再度表示することになります。

ここで、Simple.jspのソース・コードを再度確認してください。

<html:form action="/processSimple">

の行の上に

<html:errors/>

という行がありますね。これは、さきほどのActionErrorsオブジェクトを調べて
エラー・メッセージを取り出し、Webブラウザーに表示するための(Struts独自の)
タグです。

vol.104の(6)で「Name is required.」などの赤色のメッセージが表示されていたのは、
このタグが実行されていたためです。


さて、それでは実際に表示されるエラー・メッセージは、どこにあるかというと、
Tomcatのwebappsディレクトリーの下の
struts-cookbook-1.3.8\WEB-INF\classes\examplesディレクトリー、すなわち、

C:\Tomcat6.0\webapps\struts-cookbook-1.3.8\WEB-INF\classes\examples

の中にはいっている

MessageResources.properties

というファイルに入っています。

さきほどのvalidate()メソッドのソース・コードの中では

errors.add("name", new ActionMessage("errors.name.required"));

という行と

errors.add("secret", new ActionMessage("errors.secret.required"));

という行で、エラー・メッセージを指定していたのですが、これらに対応して

errors.name.required

という文字列と

errors.secret.required

という文字列が、MessageResources.propertiesの中にありますので探して見て
ください。そこをたどれば、Webページ上で(Webブラウザー上で)表示される
エラー・メッセージがわかります。
これらが、vol.104の(6)で表示されたメッセージと一致していることを確認して
ください。(なお、このメッセージの赤色は、CSS(= Cascading Style Sheets)
という、これまた別のファイルで指定されています。)

これらの仕組みについては、後ほど詳しく説明します。




以上で、Strutsのアプリケーションがどのようなものか感触がつかめたことと
思います。


ところで、以前(vol.076やvol.077で)、現在のWebアプリケーションの主流の
やり方では、

(1) Webページのフォームに入力を行ってSubmitボタン(送信ボタン)
をクリックすることによってサーブレットが呼び出され、入力データ
がサーブレットに渡される。

(2) サーブレットはBeanを起動し、必要な入力データをBeanに渡し、
Webブラウザーに応答を返すためにJSPを呼び出す。

(3) JSPはBeanから処理結果を受け取ってWebページに組み込み、
WebページをWebブラウザーに返す。

という手順でサーブレット、Bean、JSPを連携させていることをお話しましたが、
この連携のやり方は、実は、vol.036で紹介したModel/View/Controllerデザイン
・パターン(通常、MVCと略す)の考え方を採用したもので、アプリケーションを
コントローラー(Controller)オブジェクトとモデル(Model)オブジェクトと
ビュー(View)オブジェクトに分割して構成するやり方です。

このうちビュー(View)は、要するにユーザー・インターフェースのことですから、
Webアプリケーションの使用者(ユーザー)が直接、接する部分になります。
したがって、ユーザーが使用しやすいデザインにすべきで、使用しやすいデザイン
についての知識やセンスを持ったデザイナーが作るべき部分です。
そのために、デザインの知識は豊富でもあまりプログラミングの知識のないデザイ
ナーのためにJSPが用意されたのですが、これまでのJSPではまだまだプログラミン
グの知識が必要な場面が多く、不完全でした。
この点、Strutsでは独自のタグを追加することによって、徹底的にプログラミング
の必要性を減らすように工夫されています。


一方、モデルやコントローラーの部分はユーザーからは見えない部分なので、デザ
イナーではなく、純粋なプログラマーが作ることになります。

このうち、コントローラーは処理手順に従って、モデルやビューを呼び出して、処理
の流れをコントロールするオブジェクトですが、これまでに作成したWebアプリケー
ションではサーブレットがコントローラーの役割を果たしていました。
しかし、この場合、どの処理のときにどのJSPが呼び出されるかという、対応関係が
サーブレットのソース・コードを見なければわからないという、わかりにくさがあり
ました。

これに対し、Strutsでは、サーブレット(ActionServlet)とActionオブジェクト
(Actionのサブクラス)およびActionFormオブジェクト(ActionFormのサブクラス)が
コントローラーの役割をしますが、サーブレットは基本的には既成のActionServletが
自動的に使われるだけなので、実際に我々が意識しなければならないのは、Actionオブ
ジェクトとActionFormオブジェクトだけです。
そして、各ActionオブジェクトとActionFormオブジェクト、JSPの対応関係は
struts-config.xmlという一つのファイル(複数のファイルに分割することもできるが)
に、決まった様式で書かれるので、わかりやすくなっています。


なお、モデルの部分は、これまでに作成したWebアプリケーションと同じくBean
(もしくはEJB)として作成します。


Beanは、簡単に言うとプロパティー(= フィールド + setter + getter)と普通の
メソッドから構成され、かつデフォルトのコンストラクターを持つクラス(プロパ
ティーとメソッドのうち、どちらか一方は持っていなくてもいいが、デフォルトのコン
ストラクター(public)は必須)ですが、ActionFormオブジェクト(これもBeanであ
るが)の場合はsetterやgetterをコーディングしなくても使用できるやり方がありま
す(これは後述します)。


(続く)


では、今日はここまでにします。

何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2008 Future Lifestyle Inc. 不許無断複製