
第12回 Struts開発をIDEで効率化
|
Struts StudioによるWebアプリケーションの開発 |
さて、実際にStrutsを使ってWebアプリケーションを作成してみましょう。ここでは、数当てゲームを作成してみます。数当てゲームは以下の処理を行います。
| (1) | スタート画面:ユーザは最初、ユーザ名と数字を入力 | |
| (2) | 入力値判定:サーバ中で発生させた乱数とユーザが入力した数字を比較 | |
| ・ | 数字が不正解の場合:その数字がサーバ内の数字より大きいか小さいか画面に表示し、数字の入力を求める。 | |
| ・ | 数字が正解の場合:正解メッセージを表示し、ゲームを終了 | |
| (3) | 例外処理Exception発生時:例外処理を行い、エラー画面を表示 | |
上記を満たして、条件分岐と例外処理など、一通りStrutsの機能を利用するアプリケーションを作成することができます。Struts Studioを利用すると、図3のようにGUIで画面遷移を定義することができます。
![]() |
|
図3 Struts Studioによる開発画面 (クリックすると拡大します) |
■Struts Studioの特徴
筆者は、Strutsを利用するのが非常におっくうでした。まず、インストール方法がよく分からなかったり、やっとインストールできてもstruts-config.xmlの書式を理解するのが面倒だったり、苦労してstruts-config.xmlを作成しても、JSPやロジックを実行するアクションクラスに埋め込んだ値と整合性が取れずエラーが頻出したりと、とにかく使いにくいフレームワークでした。しかし、Strutsを利用したアプリケーションを開発するために生まれたStruts StudioによってStrutsの利便性は向上しました。ここで利用するStruts Studioには、次のような特徴があります。
|
迅速な開発環境の構築 ワンクリックでStruts StudioのインストールとStrutsからTomcatまでの開発環境を整えることができます。 TomcatによるJust In Time実行 付属のTomcat上でStruts Studioで作成したStrutsアプリケーションを即座に実行することができます。また、編集した内容も即座にTomcatに反映することができ、開発とテストをシームレスに行うことができます。 GUIによるstruts-config.xmlの作成支援 GUIで画面遷移を記述したり、グラフィカルなツリービューで、struts-config.xmlの設定を行うことができます。struts-config.xmlをエディタで編集するとtypoなどの入力ミスによるエラーに悩まされますが、Struts Studioを利用すれば、そのようなミスを減らし開発効率を向上させることができます。 クラステンプレート生成機能 struts-config.xmlの情報を基に、アクションクラスなどのテンプレートを生成します。ユーザーは、テンプレートにロジックを実装するだけでよくなり、余分なコーディングの手間を省けます。 テンプレートによるJSPタグライブラリの入力支援 JSPのテンプレートが豊富に用意されており、タグライブラリの入力をスムーズに行うことができます。 Antによるビルド機能 Struts Studioで作成したプロジェクトに対し、自動的にAntのビルドファイルが生成され、Struts Studioでコードをコンパイルする際にはこのビルドファイルが利用されます。Antを使うことにより、Struts Studioを利用しない環境でもアプリケーションを簡単にビルドすることができます。 英語版のみ提供 現在は、英語版しか提供されていません。しかし、メニューやヘルプメッセージが英語というだけで、日本語の入力・出力も可能となっています。一部、プロパティファイルをnative2asciiでunicodeエスケープに変換する必要があるなどの制限はありますが、日本語環境でも問題なく利用できます。 |
Struts Studioには、Community Edition/Standard Edition/Professional Editionが用意されており、Community
Editionは無料(注) で利用可能となっています。
■開発の準備
(1)インストール
ExadelのStruts Studioの配布サイト( http://www.exadel.com/products_strutsstudio.htm)からStruts
Studio Community Editionをダウンロードしインストールします。ダウンロードにはユーザー登録が必要なので、注意してください。Struts
StudioにはWindows版とLinux版が用意されていますが、ここでは、Windows版を用いて解説します。
Struts Studioの起動は、Windows版の場合は、スタートメニューから「Struts
Studio 4.7 with Console」を選択することで起動できます。Struts Studioの画面を簡単に解説すると、図4のようになります。
![]() |
| 図4 Struts Studioの画面 (クリックすると拡大します) |
それぞれの画面要素を説明しましょう。
|
ナビゲーションパネル Webアプリケーションのディレクトリやstruts-config.xmlの要素などをツリー形式で閲覧することができます。 プロパティビュー ダイアグラムビュー |
(2)プロジェクト作成
Struts Studioは一般的なJavaのIDEと同じように、プロジェクトでアプリケーションを管理します。プロジェクトを作成するには、メニューの[File]→[Create New Project]を選択し、Nameフィールドにプロジェクト名を入力します。[Next]ボタンを押し、次の画面で[Finish]をクリックします。ここでは、プロジェクト名に「guess」を入力します。
■GUIで画面遷移を作成
Struts Studioで画面遷移を作成してみましょう。左のナビゲーションパネルから「WEB-INF/struts-config.xml」をダブルクリックで選択します。すると、 ダイアグラムビューが表示されます。ダイアグラムビュー上で右クリックし、 メニューからAddを選択すると、次のメニューが表示されます。
![]() |
| 図5 Addメニュー画面 |
表1 Addメニュー
| メニュー | 解説 |
| Action | アクションの作成 |
| Global Foward | グローバルフォワードの作成 |
| Global Exception | グローバル領外への作成 |
| Page | JSPページの作成 |
(1)グローバルフォワードの作成
まずグローバルフォワードを作成しましょう。グローバルフォワードは、Webアプリケーションの開始点です。ユーザーはまず、グローバルフォワードからリンクされた画面に最初にアクセスします。
ここでは、Webアプリケーションが開始すると数字入力画面「/pages/start.jsp」を表示するグローバルフォワードを作成します。strutsコンフィグエディタ上で右クリックし、「Grobal
Foward」を選択し、表示されたダイアログ(図6)で次のように入力してください。
表2 グローバルフォワードの作成ダイアログ
|
アクションは、ロジックの実行単位です。アクションの設定によりコントロー ラであるActionServletの動作を決めることになります。図8を用いて簡単に説明します。
![]() |
| 図8 アクション |
| (1)入力 JSPからアクションサーブレットを介してアクションが実行されます。アクセスするURLは*.doで表されます。 (2)Webフォームの値を設定 アクションサーブレットは、送信されたPOST/GETのパラメータ情報を基に、フォームBeanにWebフォームの値を設定します。 (3)アクション実行 ロジックを実行するアクションクラスを呼び出します。アクションクラスは、画面の遷移先情報を返却します。 (4)フォームBeanの参照、変更 アクションクラスの内部でフォームBeanの値を参照し、ロジックを実行します。ロジック実行中、必要であれば、フォームBeanの値を変更します。 (5)フォワード アクションサーブレットから、JSPへフォワードし、結果をJSPで出力します。ほかのアクション(アクションサーブレット)へフォワードし、別のロジックを実行することもできますが、最終的にJSPを介して画面を出力します。 |
|
上記のフォームBean/アクションクラスの設定をここで行います。ダイアログビュー上で、右クリック→[Add]→[Action]を選択し、現れたダイアログで、次のように入力します。 表3 フォームBean/アクションクラスの設定
アクションが作成されると、ダイアグラムビューに次のように表示されます。
この情報は、左のナビゲーションパネルの「struts-config.xml/action-mappings」にも表示されます。ここで、ダイアログビューの「/pages/start.jsp」にカーソルを合わせてクリックし、いま作成したアクションguessに線をドラッグして持っていくと図10のようになり、start.jspのフォームを入力して、guessアクションを実行させることができます。
|
(3)フォワードの作成
アクションを実行した結果、どの画面を表示するか、あるいは次にどのロジックを実行するかをフォワードで定義します。
次のように遷移先を設定します。
先ほど作成したguessformと表示されたアクションのアイコンを右クリックし、[Create Forward]を選択します。現れた画面で必要な情報を入力します。例えば、matchには次のように入力します。 表4 フォワードの作成(matchの場合)
同じく「Create Forward」を選択しunmatchに、以下のように入力します。 表5 フォワードの作成(unmatchの場合)
2つのフォワードを作成すると、フォワード先のJSPが自動的に生成されます。最後に、unmatch.jspからguessアクションへリンクを張れば、数当てアプリケーションの画面遷移は完成します(図11)。
|
さて、画面遷移が完了したら、アクションと画面の間で値をやりとりするフォームBeanとロジックを実行するアクションクラスを作成しましょう。
(1)フォームBeanの作成
アクションクラスとJSPの間でパラメータをやりとりするためのフォームBeanを作成します。Struts 1.0では、フォームBeanをユーザーがコーディングする必要がありましたが、Srtuts
1.1から導入されたDynaFormを利用すると、アクションフォームBeanを作成する必要がなくなり、プロパティをセットするだけでよくなります。ここでは、後でユーザーの入力値の妥当性検証を行うことを考慮して、DynaFormBeanに妥当性検証機能を追加したDynaValidatorFormを利用します。
|
ナビゲーションパネルの「/WEB-INF/struts-config.xml/form-beans」を選択し、右クリックで「Create
FormBean」を選択します(図12)(注)。
以降、表示されたダイアログで、表6のように入力します。 表6 フォームBean作成ダイアログ
すると、ナビゲーションパネルのform-beansにguessformが生成されます。ここで注意点があります。name*は、ダイアログビュー上のアクションの名前と同じにして下さい。 このフォームBeanをDynaFormとして利用するための設定を行います。ナビゲーションパネルのguessformを右クリック→「Properties」→「Advanced」タブを選択し、dynamicプロパティをtrueにします。 フォームBeanで利用するプロパティを追加します。ナビゲーションパネルのguessformを右クリックし、「Create Form Property」を選択、表示されたダイアログで次のように入力します。 表7 フォームプロパティ作成ダイアログ
上記のnumを利用して、JSPのフォームからの入力値の取得と出力値の設定を行います。さらに、ユーザーの名前を取得するnameプロパティ(name:name、type:java.lang.String)と、ユーザーが入力した数字が大きいか小さいかロジックで判定した結果を入れるisGreaterプロパティ(name:isGreater、type:java.lang.String)について、表7のように定義します。
画面を見ると、一目でguessformに「num/isGreater/name」の3つのプロパティが定義されていることが分かります。 |
|||||||||||||||||||||||||
(2)アクションクラスの作成
アクションクラスでは、以下のことを行います。
- ロジックの実行
- ロジックの実行結果による次の画面の遷移先の決定
| アクションクラスを生成するには、アクションを右クリックし、現れたダイアログに必要情報を入力します。 表8 アクションクラス作成ダイアログ
アクションの実行内容は、次のようにexecuteメソッドに実装します。
|
executeメソッドを実装する注意点としては以下の点が上げられます。
- フォームBeanをフォームBeanの作成で定義したクラスにキャストします。ここでは、DynaValidatorFormの親クラスであるDynaActionFormにキャストしています。
- フォームBeanから値の取得と設定を行います。ここでは容易にするためisGreaterというプロパティをフォームBeanに設定していますが、Webのフォームの入力値以外のユーザーが操作しない値は、generatedNumberのように
HttpSessionの属性に設定してもよいでしょう。
- メソッドの戻り値にmapping.findForward(<フォワード名>)で返却されるActionForwardを返却します。このフォワード名により、次に遷移する画面もしくはアクションを指定します。
- メソッド内で発生したExceptionは、後で紹介するグローバル例外へ遷移させることができます。
![]() |
| 図14 Antでコンパイルを実行 |
HTTPヘッダのパラメータの設定、ブラウザから入力したリクエストを処理するリクエストプロセッサの設定などを行います。
|
まず、日本語がブラウザ上で正しく表示されるようにHTTPヘッダのcontentTypeの設定を行います。ここでは、ナビゲーションパネルの「WEB -INF/struts-config.xml/controller」を右クリックし「CreateProperty」を選択、次の値を入力します。 表9 プロパティ作成ダイアログ
次に、ブラウザからの日本語入力を正しく処理できるようにリクエストプロセッサを作成、登録します。リクエストプロセッサは、その名のとおり、HTTPのリクエストを処理するクラスです。アクションの実行は、このリクエストプロセッサから呼び出されます。リクエストは、リクエストプロセッサのprocessメソッドを実行することにより行われますが、デフォルトのリクエストプロセッサ org.apache.struts.action.RequestProcessorを継承したクラスの直前にリクエストの文字コードを指定することで、フォームの入力値の文字化けを回避することができます。 ナビゲーションパネルの「/src」を右クリックし、「Create」→「File」→「Java」を実行してCharsetProcessorクラスを作成します。
|
なお、リクエストの文字コードの設定については、今後、リクエストプロセッサを登録しなくとも文字コードを指定できるように改良したいと考えています。
■ビューの作成(1)JSPの作成
JSPの画面を作成します。ダイアグラムビューで、JSPをクリックすると、JSPエディタが起動します。
|
このエディタで各JSPに対して、リストxx、リストxx、リストzzのように入力します(bodyタグなど、解説の不要なタグは省略しています)。
|
■実行
さて、準備ができたら、アプリケーションを実行してみましょう。左上のTomcatランチャから左から2番目の三角のアイコンをクリックすると、Tomcatが起動します。Tomcatの起動の様子は下のコンソールに表示されます。Tomcatが起動したら、グローバルフォワード(ここでは、「start」のアイコン)を右クリックして「run」を選択するだけで、ブラウザが起動し、Webアプリケーショ ンを実行できます。
| 図16 Tomcatランチャ画面 |
![]() |
| 図17 Webアプリケーションの実行 |
Actionクラスなどのコードを変更した場合は、Tomcatランチャの一番右の手のアイコンをクリックするとWebアプリケーションがリロードされ、Tomcatを再起動することなく更新したアプリケーションでテストできます。
■エラー処理と妥当性検証
さて、先ほど作成した数当てゲームは、例外処理が入っていませんでした。これに例外処理を入れてみましょう。Strutsには、次の2つの例外処理の機構があります。Strutsは、エラー処理として次の2つをサポートしています。
|
フォーム入力値のエラー Webフォームの数値を入力すべきフィールドにアルファベットを入力した場合などの、フォームに入力した値が不正な場合のエラー処理 Exceptionによるエラー ロジック実行中に発生したExceptionに対するエラー処理 |
Struts Validatorを利用すると、フォームの入力値の妥当性検証を簡単に行うことができます。また、検証方法もクライアントサイドの検証とサーバサイドの検証を同時に行うことができます。妥当性検証を行うには、ValidatorFormを継承したフォームBeanを用いるか、DynaValidatorFormを利用する必要があります。すでにDynaValidatorFormを利用しているので、ここでは、validationの設定方法を説明します。
(2)アクションの設定
ダイアグラムビューで「/guess」アクションを右クリックしてプロパティを表示し、次のようにプロパティを設定します。
表11 プロパティの設定
| Name | Value | 解説 |
| validate | true | Struts Valdatorにより、フォームの入力値の妥当性検証を行うかどうか指定。 |
| input | /pages/unmatch.jsp | エラーが発生した時に遷移する画面 |
![]() |
| 図19 エラー画面 |
![]() |
| 図20 エラー画面 |
(3)システム例外
アクションクラスの中で、ロジックを実行する際に発生したExceptionによりエラー用ページに遷移させることができます。DBエラーなどのシステム障害が発生した場合には、この仕組みを利用するとよいでしょう。例外処理には、グローバル例外とローカル例外の2つの例外処理機構があります。グローバル例外は、すべてのアクションで発生した例外を処理でき、ローカル例外は各アクションで発生した例外を処理するという違いがあります。Struts Studioを用いると、グローバル例外の作成を簡単に行うことができます。ダイアグラムビュー上で右クリック、Global Exceptionを選択し、表示されたダイアログで次のように入力します。
表12 グローバル例外の作成ダイアログ
| フィールド | 入力値 | 解説 |
| key* | errors.exception | エラーメッセージ |
| type* | java.lang.Exception | Exceptionの型 |
| path | /pages/error.jsp | 遷移先の画面 |
| type | GuessAction | アクションクラスのクラス名 |
| scope |
(値なし) |
スコープ |
![]() |
| 図21 グローバル例外時の画面遷移 |
| error.jsp |
<%@page pageEncoding="Windows-31J"%> |
表13 エラーメッセージ
| name | value |
| errors.exception | システム障害が発生しました。恐れ入りますが、現在サービスをご利用になることはできません。 |
すでに日本語を利用する方法は本稿中で述べていますが、ここでまとめてみましょう。
(1)JSPファイルのpageディレクティブでpageEncodingを設定する
(2)controllerの設定でcontentType属性と RequestProcessorの登録を行う (3)native2asciiでアプリケーションリソースを unicodeエスケープ形式に変換する |
もし、日本語が正しく扱えない場合は、これらの点に注意してみましょう。 また、Unix環境ではWindows-31Jの代わりにEUC-JPを利用するとよいでしょう。
|
おわりに |
Strutsの基本とStruts Studioを利用したWebアプリケーションの開発について紹介してきました。Struts Studioを利用すれば、面倒だったstruts-config.xmlの編集の必要がなくなり、初心者でも直感的にStrutsを利用できるようになります。Struts Studioは現在は英語版しかリリースされていませんが、今後の日本語版のリリースに期待したいところです。
最後になりましたが、残念ながら、本連載、「現場に活かすJakarta Project」は今回で最終回となります。総論から始まり、Ant、Commons、Taglib、Tomcat WebDAV、そして、Strutsと紹介してきました。連載当初JakartaのプロジェクトであったAnt、Avaon、Jamesは個別プロジェクトへ移動し、Torque/OJBも新設されたApache DBプロジェクトへ移動しました。Turbineのコンポーネントの1つだったMavenも独立したプロジェクトとなり、Antに変わるビルドツールとして注目を浴びています。この1年はまさにJakartaプロジェクトにとって激動の年といえるでしょう。また、サーバサイドJavaのオープンソースといえばJakartaでしたが、アプリケーションサーバのJBossやO/RマッピングツールのHibernate、メタデータによる新しいスタイルのプログラミングを提供するXDoclet、そして、爆発的な勢いで普及しているIDEのEclipseなど、Jakarta以外にも使えるオープンソースは多数現れています。一昔前はJavaのオープンソースといえば、Jakartaでしたが、そのような時代はすでに終わっているといって過言ではないでしょう。しかし、Jakarta以外のオープンソースでも、よく見ると、JBossではTomcatを、HibernateはCommonsのLoggingやDBCPを、XDocletはAntを利用しています。いま、Jakarta以上に注目されているEclipseもTomcat、Ant、Luceneがインテグレートされています。Jakarta以外のほかのJavaのオープンソースも注目され始めたとはいえ、Java のオープンソースにとって、Jakartaの重要性は今後ますます大きくなっていくといえるでしょう。 今回の連載は、どちらかといえば入門者向けの記事でしたが、本連載を機にJakartaのプロダクトのユーザーが1人でも増えればと思います。また、機会があればより実践的な話をご紹介したいと思います。 最後に、連載にご協力いただいたJa-Jakartaプロジェクトの小山、横田両氏とJakartaのプロダクトの日本への普及を促進すべくドキュメントの翻訳や日本からのフィードバックに精進されているJa-Jakartaプロジェクトメンバーおよび本連載の読者の皆さまに感謝します。読者の皆さまには、機会があれば、ぜひ Ja-Jakartaの活動に参加していただければ幸いです。中にはオープンソースプロジェクトへの参加は難しそうと思われる方がいらっしゃるかもしれませんが、 Ja-Jakartaプロジェクトへ参加することは決して難しくありません。今後、読者とライターという関係ではなく、一緒に活動する仲間としてお会いできれば幸いです。| 2/2 |
|
INDEX |
||
| 第12回 Struts開発をIDEで効率化 | ||
| Page1 Strutsの仕組みとその周辺技術 |
||
| Page2 Struts StudioによるWebアプリケーションの開発 |
||
| INDEX | |
| 現場に活かすJakarta Project | |
| 第1回 仕事に活かそう!「Jakarta Project」 | |
| 第2回 AntでJavaのビルドを簡単にする | |
| 第3回 AntでEJB開発を効率化 | |
| 第4回 XMLを簡単にJavaオブジェクトにマッピング | |
| 第5回 Commonsでオブジェクトプーリングを実現 | |
| 第6回 DBのコネクションプーリングを簡単に実現 | |
| 第7回 コレクションフレームワークを拡張するCollections | |
| 第8回 java.langの機能を拡張するLang | |
| 第9回 効率的なログ出力をCommonsで実現 | |
| 第10回 JSP開発を効率化するTaglibs | |
| 第11回 TomcatでWebDAVを実現 | |
| 第12回 Struts開発をIDEで効率化 | |
| 筆者プロフィール |
| 小山博史(こやま ひろし) Ja-Jakarta Project運営委員(PMC)。Ja-Jakartaオフィシャルサーバ管理者の1人でもあり、Ja-Jakarta Taglibsサブプロジェクトのコミッタでもある。情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。書籍出版への貢献としては、Ja-Jakartaプロジェクト監訳の 『Jakarta Tomcat エキスパートガイド』(ソフトバンクパブリッシング)、Java FAQ プロジェクトによる『Javaの質問箱』(IDGジャパン)がある。 Ja-Jakarta Projectについて Ja-Jakartaプロジェクトでは、Jakartaプロジェクトのドキュメントの和訳やプロダクトの国際化/日本語化などを行っている。現在、プロジェクトのメンバーを募集中。Ja-Jakartaプロジェクトの活動に参加しようという方は、「Ja-Jakartaプロジェクトへの参加方法」 (http://www.jajakarta.org/site/getinvolved.html)を参照。 |
| 「現場に活かすJakarta Project」連載記事一覧 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


















