Struts2 Conventionプラグイン

Struts2の大きな特徴である、

Zero Configuration(アクションマッピング等の設定をファイルに記述しない)

ですが、2.0系で使用していた、Codebehindプラグインが非推奨なった。

現時点(2010/11/3)での、Struts2のバージョンも2.2.1であるため、

最新のバージョンへの更新および、Codebehindプラグインをやめ、

Conventionプラグインへの切換えをおこなってみた。

しかも、GAE(Google App Engine)環境で。

仕組み自体はそう大して変わっていないと思っていたが・・・

やはり簡単には移行できなかったので、あれこれと調べる羽目になり、

時間も結構かかったが、なんとか動作するようになり、

Conventionプラグインについても見えてきた。

とりあえず、つまづき度が大きかった順に・・・

※これはGAE(Google App Engine)でテストしていたのも重なり、障害の

切り分けに時間がかかってしまったような気もするが・・・

障害としては、URLで該当のアクションwp呼び出すURLを入力しても、

「アクションが見つからない」とのメッセージ。

“There is no Action mapped for namespace /”

Codebehindプラグインを使用していた時にもハマったエラー。

その際は次のように、”actionPackages”というパラメータを

web.xmlで設定すれば、指定した名前空間の下にあるアクションクラスを

参照してくれるようになった。

 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  <init-param>
   <param-name>actionPackages</param-name>
   <param-value>com.pg2se.sample.action</param-value>
  </init-param>
 </filter>

しかし、今回は同様のパラメータ設定をしていてもうまくアクションが呼び出されない・・

そして、どこかのページで、Struts.xml の配置が必要で、

“<constant name=”struts.devMode” value=”true” />”の設定をしろ!のようなページを

見てしまったため、

“access denied (java.io.FilePermission jar:file:\C:\Projects\gae\war\WEB-INF\lib\struts2-core-2.2.1.jar read)”

というエラーも出るようになったりで、Struts2が悪いのか、GAEか、どこがどう悪いかが見当つかなくなった。

もう1点が、Resultのjspファイルが見つからない旨のエラーが発生したこと。

“No result defined for action “のエラーメッセージ。

アクションは実行されたようだだが、ビューファイルが見つからない。

これも今までは普通にjspを配置すれば動いていたのだが・・・

結局、順番にひとつづつ試していってわかったこと。

1.Struts.xml は無くても動作はした。

2.Struts.xml の”<constant name=”struts.devMode” value=”false” />”でvalueはfalseにする。

※これはGAE環境だからかもしれない・・

3.GAE環境では、セキュリティマネージャを無効にする必要がある

※web.xmlにリスナーを設定してセキュリティマネージャを無効にする。

<listener><!-- GAE関連で必要なListenerを設定 -->
    <listener-class>com.pg2se.google.InitListener</listener-class>
</listener>
    public class InitListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

        @override

        public void contextInitialized(ServletContextEvent arg0) {
            OgnlRuntime.setSecurityManager(null);
        }

    }

こんな感じ

4.これもGAE環境でのエラーのはず。

クラスが見つからない旨のエラー。→xalan関連のクラス。

こちらはxalanのライブラリをダウンロードして手動で追加する必要があった。

5.アクションクラスが見つからない件

上記の設定で、すべて再起動、再ビルドするとアクションは実行されるようになった。

※因みにConventionプラグインでは、web.xmlでの、”actionPackages”パラメータは

記述しなくて良く、アクションクラスの格納されたパッケージは自動検出される。

→action,actions,struts,struts2の名前のついたパッケージが対象

6.ビューファイルが見つからない件

Conventionプラグインでは、ビューファイル(jsp等)の配置場所もデフォルトで設定

されている。それが、/WEB-INF/content/ です。

※そりゃ、今までどおりでは、resultのファイルが呼び出されない訳だ。

取り急ぎ、jspのビューファイルを、上記場所に移動。

以上で、なんとかこれまでどおり、Struts2が動作するようになった。(しかもGAE上で)

Conventionプラグインン・・・なかなか癖があり、手ごわかった。

さて、これまでは、Conventionプラグインのデフォルトの設定を生かしたが、

カスタマイズするには?だけど・・・、方法はあります。

struts.xmlファイルに<constant>タグで設定を記述することによって、既定値を変更することが可能です。

例)<constant name=”struts.convention.result.path” value=”/WEB-INF/jsp/”/>

<constant name=”struts.convention.package.locators” value=”act”/>

他にも設定変更の詳細や、今回ハマった内容のほとんどについては、

以下のページで詳しく解説されています。

Struts 2入門(6)?XML不要のZero Configuration?

Google App Engine/Struts2の連携

今後、Struts2.2、GAEを連携させてより深いところまで、

Struts2を追及していこうと思います。

Seasar2 徹底入門

Google App Engine と Struts2 で Twitter連携

関連記事

  1. Google App Engine と Stru…

    Google App Engineプログラミング入門Google App…

  2. Struts2サンプル 掲示板アプリケーション

    はじめに今回はStruts2を利用した、より実践的なアプリケーション…

  3. Struts2 の脆弱性を悪用した攻撃の急増

    Webアプリケーションフレームワークで有名になったなStrutsの後継、…

  4. Seasar2 徹底入門

    Seasar2徹底入門著者: 竹添 直樹発行人: 佐々木 幹…

  5. JANコード作成プログラム[.net]

    JANコードJANコードとは、ご存じのとおり、日本で最も普及している…

  6. Microsft .NET C#

    System.IO.Path.GetTempFi…

    C#のプロジェクトで、一時的なファイル(Tempファイル)を作成するため…

  7. 続 Struts 2入門

    CodeZineで、Struts2入門(1)~(8) の続編、続 S…

  8. C# – TransactionSc…

    業務アプリケーションにデータベース処理はつきもので、さらにデータベー…

最近の記事

  1. Microsft .NET C#
  2. れいといちかとまほうのトンネル
PAGE TOP