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

» 2005年05月18日 10時00分 公開
[佐藤匡剛@IT]

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

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

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

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

struts-config.xml(抜粋)
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts 
  Configuration 1.2//EN" 
  "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
  ・・・中略・・・

  <action-mappings>
    <action path="/hello" 
forward="/pages/hello.jsp"/>
  </action-mappings>
  ・・・中略・・・
</struts-config>


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

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

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

struts-config.xml(抜粋)
 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts 
  Configuration 1.2//EN" 
  "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
  ・・・中略・・・
  <action-mappings>
    <action path="/hello"

      type="org.apache.struts.actions.ForwardAction"
      parameter="/pages/hello.jsp"
/>
  </action-mappings>
  ・・・中略・・・
</struts-config>


 どちらの方法でも、「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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。