Strutsを用いてWebアプリケーションを開発する場合、ページから直接JSPやVelocityテンプレートといったほかのページへリンクを張ることは、好ましくありません。URIと実際のアクションやページとの関連付けが、アクションマッピングを介することで、Struts構成ファイル(struts-config.xml)上で一元管理されることが重要だからです。
とはいうものの、特に何も処理を加えずにそのままページを表示させたいことも多々あります。Strutsでは、以下に挙げる2通りの方法で、アクションを介さずに直接ページへ飛ぶアクションマッピングを定義することができます。
アクションマッピングにアクションを登録する際は、通常<action>要素のtype属性を定義しますが、代わりにforward属性を定義します。forward属性には、転送先のページのパスを指定します。
<?xml version="1.0" encoding="UTF-8"?> |
単に「success」へ転送するだけのActionクラスを自前で用意することも考えられますが、いちいちクラスを実装するのはやはり面倒です。こうした基本的な機能を持つActionクラスは、Strutsにすでに用意されています。
Strutsに組み込みのActionクラスは、すべてorg.apache.struts.actionsパッケージに収められています。そのうち、ForwardActionクラスがページ転送のためのActionクラスです。このクラスをアクションマッピングへ登録する際は、<forward>子要素を定義せず、代わりにparameter属性に転送先ページのパスを指定します。
<?xml version="1.0" encoding="UTF-8" ?> |
どちらの方法でも、「http://localhost:8080/myApp/hello.do」へアクセスすると「http://localhost:8080/myApp/pages/hello.jsp」が表示されます(「myApp」には、このサンプルを配備したアプリケーションのコンテキスト名が入ります)。
両者の方法で、動作の異なる点が1点あります。Strutsのモジュール(注)を用いたときに、「(2) ForwardAction」では転送先ページのパスがアプリケーションコンテキストからの相対パスとして扱われるのに対し、「(1) forward属性」ではそうならない点です。例えば、「/myApp」アプリケーションの「mod」モジュールで定義されたアクションマッピングを考えます。転送先ページを「/pages/hello.jsp」と指定した場合、(1)では実際には「/myApp/mod/pages/hello.jsp」へ転送されるのに対し、(2)では「/myApp/pages/hello.jsp」へ転送される、ということです。使い分けの際には、この点に注意してください。
注:Strutsのモジュール機能については、「Strutsでコンフィグレーションファイルを分割する」を参照してください。
ここで紹介した方法は、単に直接ページを表示したいという要求を満たすに留まりません。アクションマッピングを介することで、ActionFormを使ったフォームデータの検証や初期値の設定などの恩恵を受けることもできるのです。そのほか、既存のWebアプリケーションにアクションマッピングをかぶせて、Strutsアプリケーションとして統合するような用途や、開発の初期段階でのプロトタイプ開発への利用など、さまざまな積極的な活用法が考えられます。
Copyright © ITmedia, Inc. All Rights Reserved.