T2-0.6.0-gaリリース

T2の0.6.0-gaをリリースしました。詳細はshot6さんの日記をご覧下さい。


0.6では、AMF3の機能追加と、パスマッチングの変更がメインでした。
0.6から、FlexなどのAMF3クライアントとやりとりできるようになります。
パスマッチングは、主にルートパスへのマッチング機能の追加でしたが、これは個人的にも欲しかった機能です。


ただしこのルートマッチについては、注意点があります。
例えば次のようなPageクラスの場合、ほかのPageクラスで処理出来なかったリクエストはすべてこのindexメソッドに集まってしまいます。

@Page("/")
public class HogePage{
   @Default
   public Navigation index(){
         return "index.html";
   }
}

"/"のパスは、どのリクエストでも必ずマッチしてしまうためです。
(つまり "/" , "/hoge" ,"/foo.jpg" のいずれも/から開始するので、Pageクラスにマッチしてしまう)


これで困るのが、だいたい次の2つのパターンかと思います。

- 画像やアプレットを出そうと思ったら、出なかった
- URLが間違っていたが、index.htmlが帰って来た


前者は、画像やCSSなどのリソースのリクエストをT2で扱う設定になっている場合に発生しますので、web.xmlの設定を行う事で、そもそもT2が扱わないように出来ます。
(設定方法はT2の設定方法を参照)


後者の場合、たとえば

@Page("/")
public class IndexPage{
	@Default
	public Navigation index(HttpServletRequest req) {
                //リクエストパスを取り出す
		String path = req.getRequestURI().substring(
				req.getContextPath().length());
                //パスが"/"か、もしくは"indexなんとか"なら、index.jspを表示
		if (path.equals("/") || path.startWith("index.")) {
			return Forward.to("/index.jsp");
		} else {
                        //それ以外はリソースとみなしてスルー
			return PassThrough.pass();
		}
	}
}

というような実装で対応する事が出来るかと思います。
これは1例ですが、ルートマッチさせると思いのほかいろいろなパスにマッチしてしまうので、注意が必要になります。
(逆に最終的にここにリクエストが集まるのでプログラマブルに解決できる、とも言えますが)


いずれにせよ、ルートマッチはハマるケースが多そうなので、注意が必要です。


そのほかプロダクトの機能以外では、JavaDocとプロジェクトwikiの更新があります。
少しづつではありますが、私も微力ながら更新しています。


問題や質問などありましたら、お気軽にお問い合わせください。