SAStrutsのパスからActionの決定と、実行メソッドの決定ルールについて(の実際?)

SAStruts(1.04-sp1)の話。
パスからのAction名解決の説明と、
実行メソッドの解決の話で若干の不思議さを感じたので軽く調査。
少なくとも、パスの一番後ろにActionを付与(/のない場合)は違うな・・・と。
(というか実行メソッドの決定ルールがActionの決定ルールほど書いていないんだけど)


要は、
/add/diff
というリクエストに対して、
AddAction#diff
add.DiffAction#index
のどちらが呼ばれるのか?


説明によると、最後にAction付与とのことで、
add.DiffActionが決定される。(それで見つからなければメソッドと判断)
と思っていたが、予想を裏切り、AddAction#diffが呼ばれる。


RoutingFilter
でまぁそんな感じの解析をやっているようだ。


パスについて、「/」区切りで
頭の方から解析して、Actionと実行メソッドの組み合わせが存在する組み合わせを探していくといった感じ。
区切りの前がパッケージとクラス、後ろがパラメータ(メソッド(とurlPattern))といった感じでずらしながら存在を確認していく
といった感じかな?正確には違うと思うけど


でもまぁ、そりゃそうだ・・・って感じですね。
indexメソッドの省略やら、urlPatternの解釈やら考えると・・・


というわけでそのような場合どうしたものか・・・
/add/diff/indexと直接指定すれば問題ないんだろうけど。


というか・・・
サブパッケージ(サブアプリケーション)を利用する構造にしたならすべてそれに合わせるのが無難か。
というか、実行メソッドとサブアプリケーションの名前の衝突があり得ることがあるか?
まぁ安易に名前つけたりするとないとはいえないだろうけど。


なんにせよ
ちょいと想定と違うのでメモ。