Strutsで別モジュールにアクセスする(SwitchAction)JavaTips 〜Apache/Jakarta編

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

 Strutsでは、1.1よりモジュールという機能が追加されました。これは、Struts構成ファイル(struts-config.xml)の肥大化を防いだり、Webアプリケーションを機能ごとに分割して開発したりするための方法を提供するものです。

 モジュールは本来アプリケーションを機能ごとに分割するためのものです。そのため、あるモジュールから別のモジュールへアクセスすることは、モジュール間の依存性を強めるので好ましくありません。しかし、場合によってはどうしても必要となることもあるでしょう。

 このような場合は、以下の3種類の方法で別モジュールのアクションにアクセスできます。

  • StrutsのHTMLタグライブラリ(struts-html.tld)を使い、ハイパーリンク用のタグでmodule属性を指定する(Struts1.2以降)
  • Struts構成ファイル中の<forward>タグで、コンテキストからの相対パスを指定する
  • Struts組み込みのアクションSwitchActionを使う

 Struts1.2以降であれば、最も簡単のはHTMLタグライブラリによる方法でしょう。しかし本TIPSでは、Struts1.1でも使うことのできる、SwitchActionによる方法について説明します。

注:Strutsのモジュール機能の使い方については、「Strutsでコンフィグレーションファイルを分割する」を参照してください。

使い方

 まず、Struts構成ファイルのアクションマッピングにSwitchActionを登録します。アクションへのパスはどこへ設定しても構いませんが、ここでは「/switch」としています。

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="
/switch" 
type="org.apache.struts.actions.SwitchAction"/>
    ・・・中略・・・
  </action-mappings>
  ・・・中略・・・
</struts-config>


 SwitchActionクラスへアクセスするには、以下の2つのリクエスト・パラメータが必要になります。

SwitchActionで指定すべきリクエスト・パラメータ
パラメータ 説明
prefix アクセスしたいモジュールを指定するための接頭辞。「mod」モジュールへアクセスするならば、「/mod」とする。デフォルト・モジュールの場合は、「/」とはせず空の文字列を渡す
page 切り替え先となるモジュール内のページ。モジュールのStruts構成ファイルにおいて、パス「/dir/page」にマッピングされているアクションへアクセスするには、「/dir/page.do」を渡す

 モジュール「mod1」から、モジュール「mod2」の「/myPage」アクションにアクセスするには、以下のようにします。

 <action name="success" path="/switch.do?prefix=/mod2&amp;page=/myPage.do" />


また、デフォルト・モジュールの「/myPage」アクションへアクセスする場合は、

 <action name="success" path="/switch.do?prefix=&amp;page=/myPage.do" />


となります。

 ここではGETメソッドを用いましたが、POSTメソッドを使い、フォームから上記のリクエスト・パラメータを送信しても問題ありません。なお、当然ですが、

 http://localhost:8080/myContext/mod1/switch.do?prefix=/mod1&page=
/switch.do


などとすると、循環参照が起こってエラーとなるので注意が必要です。

Profile

WINGSプロジェクト

佐藤匡剛


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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