DirectAction と WORequestHandler。〜DirectAction.の4〜

 前回記事“DirectAction と WOHyperlink。”の様にして拵えたリンクのリンク先に「wosid=FmAzyQjh9X9G6YZetpx0CM」みたいな文字列が含まれている事に気がつかれるかも知れません(←気がつかなかった人は、今気がつけ、さぁ気がつけ)。これは最初の記事“DirectAction.”で少しふれましたセッションIDであります。
 くりかえしになりますが、WebObjectsではデフォルトでセッション管理機能付きですから、最初にアクセスした時点でセッションIDが生成され管理機能を発動してしまいます。これはこれでありがたい動きなのですけども、“れいあれ”さんの様にセッション管理機能を排除する方向で運用したい場合には邪魔以外の何モノでもありません。

 WebObjectsにはWORequestHandlerという抽象クラスがあります。RequestHandlerは受け取ったHTTPリクエストに合わせてどう処理をするか決めるモノで、デフォルトで3つ用意されています(←自前で作っても可。作った事ないけど)。
 DirectActionのリクエストを受け取った場合、WODirectActionRequestHandlerというWORequestHandlerを継承したクラスを用いて処理を行い、必要がない限りセッション管理をする事はありません。が、特に指定のないリクエスト(←例えば初期ページをよばれた場合など。このサイトでいうとhttp://web-ya.jp/cgi-bin/WebObjects/ReiAreとか)の場合ではWOComponentRequestHandlerの方を用いられてしまい、セッション管理を始めてしまいます。しかしこれは、デフォルトのRequestHandlerがWOComponentRequestHandlerになっているでだけで変更可能ですから、WODirectActionRequestHandlerを使う様に仕向ける事で対処できます。

 デフォルトのRequestHandlerは、プロジェクトに標準で組み込まれるApplicationクラスで管理されており変更可能ですので、Application.java内に記述されているApplicationのコンストラクタに

WORequestHandler directActionRequestHandler = requestHandlerForKey(directActionRequestHandlerKey());
setDefaultRequestHandler(directActionRequestHandler);

 の2行を追記すると、デフォルトのRequestHandlerはWODirectActionRequestHandlerとなります。

 そんなわけで、昨日書き忘れたネタでした。

ーー追記ーー
 WOHyperlinkにwosidを付けないだけなら、wosid をキー名に、falseをvalueでいける。と倉持さんより“けいじばん”(該当スレッド)で教えて頂きました。ありがとうございます。