2007 年 4 月 15 日 23 時 59 分

Command を登録して使ってみる


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


ComposableRequestProcessor で処理する Command は、
設定ファイルによって登録されている。
org.apache.struts.chain.chain-config.xml がそれだ。

chain-config.xml を読んでみるとかなり巨大な内容だが、
Struts はこれを簡単に拡張できるように考慮しており、
別にチェインの設定の XML ファイルを作るだけで、
簡単にユーザ定義コマンドを追加することができる。

ということで、まずは /WEB-INF/chain-config.xml を作る。

========== /WEB-INF/chain-config.xml ==========
<?xml version="1.0" ?>

<catalog name="struts">
    <command
            name="servlet-standard-preprocess"               
            className="jp.loafer.test.commands.UTF8RequestCommand"
    />
</catalog>
========== end of /WEB-INF/chain-config.xml ==========

XML の書き方については、commons-chain に準じる。
ややこしくなるため、詳細はここでは触れない。

Struts は、「struts」という名前のカタログに、
「servlet-standard-preprocess」というコマンドがあれば、
それをリクエストの処理の最中に呼び出してくれる。
(org.apache.struts.chain.chain-config.xml から参照)

この呼び出しは、必要最小限の初期化のすぐ後であるため、
ほとんどの処理を自由に行うことができるのだ。

さて、設定ファイルができたら、それを Struts に登録する。
web.xml の ActionServlet の初期化パラメータで、
ファイル名を指定することで、コマンドの設定が登録される。

    <servlet>
        <servlet-name>struts</servlet-name>
        <servlet-class>
            org.apache.struts.action.ActionServlet
        </servlet-class>
        <init-param>
            <param-name>chainConfig</param-name>
            <param-value>
                org/apache/struts/chain/chain-config.xml,
                /WEB-INF/chain-config.xml
            </param-value>
        </init-param>
    </servlet>

chainConfig パラメータでコマンド設定ファイルを指定する。
ここでは複数のパスをカンマ区切りで指定することができ、
このパスは、その時のクラスローダや、
Web アプリケーションのパスを基準として解決される。

org/apache/struts/chain/chain-config.xml の追加指定は、
Struts の既定のコマンド設定も読み込むためである。
(chainConfig の既定では、このパスだけとなっている)

さて、では実行してみよう。
もちろん、一昨日作った Filter は外すこと。
これでも、ちゃんと日本語が表示されることが確認できた。

commons-chain を使うメリットは、
コマンドの挿入や削除などの組み合わせが自由自在で、
さらにその変更が設定ファイルによって行われ、
元となるコードの変更が一切不要であることである。

Struts の ComposableRequestProcessor も、
このメリットを生かして作られているのだ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.