検索
連載

Strutsでリクエストをフォワードする(ForwardAction)JavaTips 〜Apache/Jakarta編

Share
Tweet
LINE
Hatena

 Strutsを用いてWebアプリケーションを開発する場合、ページから直接JSPやVelocityテンプレートといったほかのページへリンクを張ることは、好ましくありません。URIと実際のアクションやページとの関連付けが、アクションマッピングを介することで、Struts構成ファイル(struts-config.xml)上で一元管理されることが重要だからです。

 とはいうものの、特に何も処理を加えずにそのままページを表示させたいことも多々あります。Strutsでは、以下に挙げる2通りの方法で、アクションを介さずに直接ページへ飛ぶアクションマッピングを定義することができます。

(1)<action>要素のforward属性を用いる方法

 アクションマッピングにアクションを登録する際は、通常<action>要素のtype属性を定義しますが、代わりにforward属性を定義します。forward属性には、転送先のページのパスを指定します。

struts-config.xml(抜粋)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


(2)組み込みのForwardActionを用いる方法

 単に「success」へ転送するだけのActionクラスを自前で用意することも考えられますが、いちいちクラスを実装するのはやはり面倒です。こうした基本的な機能を持つActionクラスは、Strutsにすでに用意されています。

 Strutsに組み込みのActionクラスは、すべてorg.apache.struts.actionsパッケージに収められています。そのうち、ForwardActionクラスがページ転送のためのActionクラスです。このクラスをアクションマッピングへ登録する際は、<forward>子要素を定義せず、代わりにparameter属性に転送先ページのパスを指定します。

struts-config.xml(抜粋)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 どちらの方法でも、「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アプリケーションとして統合するような用途や、開発の初期段階でのプロトタイプ開発への利用など、さまざまな積極的な活用法が考えられます。

Profile

WINGSプロジェクト

佐藤匡剛


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る