このアーカイブは同期化されません。 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 も、
このメリットを生かして作られているのだ。