actionとforward周り

最近電波を垂れ流してばかりで、まともな検証をしてなかったのですが、
勉強のためにチュートリアルとか最近のissueを見ているうちに、気づいたことを挙げます。
仕様and/or既出かもしれないけど、とりあえず。

パスを分割したときの、実行メソッドの選択

/japan/tokyo/というパスにアクセスされたときに、
action.JapanAction#tokyo()と、
action.japan.TokyoAction#index()
という2つの実行メソッドがあるとき、 どちらが呼ばれるか。

JapanAction#tokyo() のほうでした。
実務上は、ある階層のアクションクラスと同名のサブパッケージを作るべきではなさそうに思うので、ほんの好奇心で調べました。これはこういうものだと知っておく程度で十分ですね。

上位パスへの戻り

SAStrutsでは実行メソッドの戻り値で遷移先を指定します。このとき、上位パスへ遷移したい場合にどうすればよいでしょうか。
たとえば、チュートリアルEmployeeActionbackToTop()という実行メソッドを作ります。これがコールされたときに、チュートリアルのトップページに戻りたいとします。
return "/";と書いておき、/sa-struts-tutorial/employee/backToTop/を呼び出したところ、action.IndexActionが呼び出されて、トップページが表示されます。ですが、URLは/sa-struts-tutorial/employee/backToTop/のままです(forwardなので当然にそうなる)。
これだと、引き続いて「足し算」を実行しようとすると、足し算のリンクが相対パス指定(add/)なので、/sa-struts-tutorial/employee/backToTop/add/にアクセスしようとして404エラーになります。そのため、このようにするなら、トップページでは、今の

<li><a href="add/">足し算</a></li>

のような相対パスではなくて

<li><a href="/sa-struts-tutorial/add/">足し算</a></li>

のように絶対パスで指定する必要があります。(多分・・・)

リダイレクト

前述の問題があるので、forwardではなくてredirectにしてみようと思いました。
で機能リファレンスにもとづきreturn "/?redirect=true"とやったところ、
WEB-INF/view/が404エラーになった。クライアントから見たらWEB-INFが出てくるのはおかしいので、SASTRUTS-40のところで何かがどうにかなっている感じです。

いたって中途半端ですがここで中断します。。。。
追記:上はjspにリダイレクトするように書いていましたが、現在ではダイレクトアクセスは禁止になっているので表記を変えました。