request.getRequestURL()実装

Tomcat5.0および5.5では、たとえば Action(.do) --> Velocity(.vmとか) にRD.forward()されたあとでは、

  request.getRequestURI()      --> hoge.vm

となっていた。つまり、「リクエストのURI」ではなく、forward後の自分のパスになっていた、というわけ。
これではリクエストを元に自己呼び出しを再構築するときには支障がある。

  1. Actionから forward でvelocityへ
  2. Velocity内で ViewHelperパターンとかで requestから getRequestURI()して hrefを構築するとか
  3. このhrefは Actionを呼び出してほしいが 内容物は "hoge.vm"とかfwd後のもの

なんてこった!で、ここでgetRequestURL()というのもあるんです。コイツが超クセモノだった。

  Tomcat5.0: request.getRequestURL()   --> http://...../hoge.do
  Tomcat5.5: request.getRequestURL()   --> http://...../hoge.vm  (つまりURIと同じ)

ななななんだってー!。
実はもともとこの問題の回避のために、Tomcat5.0上で getRequestURL()からURIを構築しなおしていたのだけど、
5.5ではもう元々のリクエストのパスは取れないってことなのか。なにか方法があるのか?

で、まあ、もうServletFilterとかでrequestのattributeに設定しちゃえばいいんじゃね?と思うようになりました。
なんかViewがfilterの設定に依存したりするようになりますが、もういいや!みたいな。ガックリ。

あきらめたらそこで設計の負債(技術的負債)ですよ…